String str = new String("abc");
第一个对象是“abc”,每一个字符串都是一个常量,不可改变的,放在常量池里面,
而string new 出来的对象又是一个对象,他有一个实实在在的内存空间存放“abc”在常量池中的地址,而str是指向这块空间的引用,而通过这种方式的string对象中指向"abc"的值可以被改变,可以指向“bcd”,“dfefr”等等,但是str的地址不会变
这里要明白,字符串常量不完全等于字符串对象,其实上面的一条语句用了三个内存空间,“abc"的,new出来的String存放的,还有一个是Str的。而通过例如String str = “abc”创建的实例,就只有两个空间。
这么说不知道你能不能明白 |