String类是final的。
String str = new String("Hello"); //创建了两个对象
系统会先创建一个匿名对象"Hello"存入堆内存(我们暂且叫它A),然后new关键字会在堆内存中又开辟一块新的空间,然后把"Hello"存进去,并且把地址返回给栈内存中的str, 此时A对象成为了一个垃圾对象,因为它没有被任何栈中的变量指向,会被GC自动回收。
直接赋值,java语法就这么规定的。
因为String类太常用了,这样直接赋值,避免多次创建内容相同的String对象,节省空间,提高效率。
String s0=”kvill”;
String s1=”kvill”;
String s2=”kv” + “ill”;
System.out.println( s0==s1 );
System.out.println( s0==s2 );
结果为:
true
true
首先,我们要知道Java会确保一个字符串常量只有一个拷贝。
因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符 串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中 ”kvill”的一个引用。
相关文章
- 11-15swift直接赋值与引用赋值都会触发willSet
- 11-15c++ string类型成员变量在调用构造函数后未能正确赋值
- 11-15String数组必须初始化之后才能赋值
- 11-15std::string的拷贝赋值研究
- 11-15python 直接赋值、浅拷贝和深度拷贝解析
- 11-151449. 数位成本和为目标值的最大数字 力扣 动态规划 难 string赋值和比较
- 11-15整数没有超范围可以直接赋值给char
- 11-15精度损失以及不超范围可以直接赋值byte和short
- 11-15Winform中实现List
赋值给dataGridView与实现多选、全选和获取选择的内容 - 11-15在struct 中使用string,赋值会报错