String
字符串是常量,创建后不可改变。
字符串字面值存储在字符串池中,可以共享。
案列如下。
1.字符串字面值存储在字符串池中内存图如下。
2.不可变性:把name的值改成"张三",在内存中不是直接把“hello”改成“张三”,而是在字符串池中重新开辟个“张三”,name从指向“hello”改到指向“张三”
3.新增一个变量name2,值为“张三”,那么name2会去字符串池中寻找有没有“张三”如果有的话,就把“张三”也赋给name2,这样就实现了常量共享。
字符串的另一种创建方式。
这种方式在堆中创建一个“字符串Java”,然后看字符串池是否有“java”,没有就开辟一个。此时变量str的地址是堆中“Java”的地址。
思考一下,如果再用这个方法创建一个str2,值也为“java”,那么str == str2 吗?答案是不一样,创建对象会在堆中开辟新空间,给str2的地址和str的地址不同。