java中String的内存分析

String str1="ABC"和String str2 = new String("ABC") 的区别。
String str1="ABC" 可能创建一个对象或者不创建对象,
	如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").
具体点:
	String s = new String("a");创建2个对象,一个是“a", 一个是”new String("a)“
Class被加载时,"a"被作为常量读入,在常量池(constant pool)里创建了一个共享的值为"a"的String对象;然后当调用到new String("a")的时候,会在堆(heap)里创建这个new   String("a")对象;②由于常量池(constant pool)中存在"a"所以不再创建"a",只创建new String("a")。

你可能感兴趣的:(java基础)