写点什么

Java 个人学习之旅 (第十天),java 就业班百度网盘

用户头像
极客good
关注
发布于: 刚刚
  • 将字符串转换为全大写 &&全小写

  • 返回值类型:String


12. intern


  • 返回字符串对象的规范表示,也就是如果字符串常量池中已经创建有了该字符串的地址,则直接返回该地址值的引用,不再开辟新的内存空间


其实 String 类型常用的方法还有很多,在今后的开发中也会不断用到,所以我认为备一份 jdk 的 API 文档随时查阅是很有必要的


2. String 具有不可变性:


=====================================================================================


说明:


  1. 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的 value 进行赋值。

  2. 当对现的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的 value 进行赋值。

  3. 当调用 String 的 replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的 value 进行赋值。


代码举例:


public class Example {


public static void main(String[] args) {


String a = "Hello"; //字面量的定义方法


String b = "Hello";


String c = new String("Hello");


String d = new String("Hello");


System.out.println(a == b); //true 比较地址值


System.out.println(a == c); //false


System.out.println(a.equals(c)); //true


System.out.println(c == d); //false


System.out.println(c.equals(d)); //true


}


}


上述代码的结果中的第一个比较结果完全是巧合,原因是字符串刚生成时调用的是同一块字符


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


串常量池,而字符串常量池不会存在相同类型的常量,这也就意味着这两个字符串的地址值是相同的


如果我们再对 a 和 b 赋值然后再比较就能说明问题了


public class Example {


public static void main(String[] args) {


String a = "Hello";


a += "c";


String b = "Hello";


b += "c";


System.out.println(a == b);


}


}


运行结果:



我们同时也可以发现,String 实例化的方式有两种:


  1. 通过字面量的方式定义

  2. 通过 new + 构造器的方式


第一种方式是在方法区的字符串常量池中直接开辟空间


第二种方式则是在堆生成对象,但引用的值还是来自字符串常量池


String 是引用类型,涉及到引用类型的变量的比较,都用 equals 方法比较稳妥


3. StringBuilder 和 StringBuffer:


==================================================================================================


StringBuilder 和 StringBuffer 都是用来拼接字符串的,后期会经常用到


首先看一下 String,StringBuilder,StringBuffer 三者之间的相关说明:


  1. String:不可变的字符序列;底层使用 char[]存储

  2. StringBuffer:可变的字符序列;线程安全的,效率低;底层使用 char[]存储

  3. StringBuilder:可变的字符序列;jdk5.0 新增的,线程不安全的,效率高;底层使用 char[]存储


StringBuilder 和 StringBuffer 的内存解析:


以 StringBuffer 为例:


public class Example {


public static void main(String[] args) {


StringBuffer sb1 = new StringBuffer();


//查看 StringBuffer 的初始容量


System.out.println(sb1.capacity());


//查看 StringBuffer 的长度


System.out.println(sb1.length());


}


}


运行结果:



可以看到,StringBuilder 的初始容量为 16,没赋值时长度为零


当我们插入的字符串长度超过 StringBuilder 的初始容量时,StringBuilder 会进行扩容,扩容的方式是:


原长度*2 + 2,同时将旧的数组赋值到新的数组中


StringBuilder 和 StringBuffer 中的常用方法:


public class Example {


public static void main(String[] args) {


StringBuffer sb1 = new StringBuffer();


//使用 StringBuffer 的 append()方法拼接字符串


sb1.append("Hello");


System.out.println(sb1.toString()); //输出


sb1.delete(0, 3); //删除字符方法,输入索引,左闭右开


System.out.println(sb1.toString());


sb1.setCharAt(0, 'h'); //修改字符,输入索引和修改后的字符


System.out.println(sb1.toString());


sb1.insert(0, 'l'); //插入字符,输入索引和要插入的字符


System.out.println(sb1.toString());


}


}

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Java个人学习之旅(第十天),java就业班百度网盘