s3 和s4与s1和s2有和不同,为什么一个地址相同,一个不同?
s3 和s4与s1和s2有和不同,为什么一个地址相同,一个不同?
s3 和s4与s1和s2有和不同,为什么一个地址相同,一个不同?
2015-04-24
字符串存储的地方有两种,分别是
常量池
堆内存
我们在程序中通常会用以下四种方式来创建字符串,现在我分别说说这四种创建方式创建的字符串分别存储到什么地方:
String s = new String("imooc"); /* 存储到堆中,首先会判断池中是否有该字符串,如果有,则从池中复制一份到堆中,将堆中的地址返回引用对象;如果没有,则在堆中创建一份,返回堆中的地址给引用对象。 */
String s = "imooc"; /* 存储到常量池中,首先判断池中是否有该字符串,如果有,则从池中返回地址给引用对象;如果没有,则从池中创建该字符串,然后返回池中的地址给引用对象。 */
String s = "I love " + "imooc"; /* 存储到常量池中,首先判断池中是否有该字符串,如果有,则从池中返回地址给引用对象;如果没有,则从池中创建该字符串,然后返回池中的地址给引用对象。 */
String s1 = "I love"; String s2 = s1 + "imooc"; /* 存储到堆中,首先会判断池中是否有该字符串,如果有,则从池中复制一份到堆中,将堆中的地址返回引用对象;如果没有,则在堆中创建一份,返回堆中的地址给引用对象。 */
参考地址:Java中的String与常量池
举报