java中String类与变量相加解释一旦创建了String对象,那它的值就无法改变了

来源:互联网 发布:淘宝手机删除差评步骤 编辑:程序博客网 时间:2024/05/19 12:28
public class str {public static void main(String args[]){int value=1;String str1="ABC"+value;String str2="ABC"+1;String str3=str1;String str4="ABC1";String str5="ABC"+value;boolean a=(str1==str2);boolean b=(str1==str3);boolean c=(str1==str4);boolean d=(str1==str5);System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);}}结果为什么是false,true,false,false
==是用作比较地址。“那么str1+value的地址就变了吗”:是的,String字符串每进行操作(比如像你进行的拼接“ABC”+ value)都会new一个新对象去保存之前这两对象的内容,新对象肯定会有一个新地址,所以当str1=str1+value时,str1已经指向了别的地址(多说一句原来的“ABC”由于没有了变量指向,这个时候已经是垃圾,等待自动回收)。至于“3和1 却相等”因为String str3=str1,实际上是将str1的地址付给了str3,所以它们指向同一个地址。当要进行很多次字符串拼接时不要用String,应该使用Stringbuffer或Stringbuild(分别是线程安全和非线程安全)。
string st = "ABC"; 和 String st = new String("ABC");虽然两者结果一样,但后者多创建了一次实例。
解释:
第一种,st直接指向“ABC”常量实例中。
当使用String st="ABC",这种方式时,先去内存的Heap中找是否存在"ABC"这个字符串,若存在,则将地址引用。若不存在则创建。
第二种,新建一个String实例化,st指向String实例化(new String("ABC"))
当使用String st=new String("ABC");时,不管事先是否存在"ABC",每次都会创建其新的对象。
0 0
原创粉丝点击