Java中String直接赋值和使用new的区别

2025-01-31 10:46:08
推荐回答(2个)
回答1:

直接赋值会将该字符串一直储存在缓存中,后面如果用到相同的字符串,则直接取这个字符串对象。而new是每次都新建一个对象。可通过执行下面的代码来看出区别:

String a = "abc";
String b = "abc";
System.out.println(a==b);        //true
String c = new String("def");
String d = new String("def");
System.out.println(c==d);        //false

上面示例中, a==b的结果为true,说明它们是同一个对象,而c==d的结果为false,说明他们是不同的对象。

以上就是我个人的粗浅理解了,至于更深入的垃圾回收什么的还没了解过。

回答2:

你去看一下它底层的实现就明白了 ·
对于第一种方式· java有一个字符串缓冲区 你新建一个的时候它会先找缓冲区里有没有这个字符串 如果有 直接返回引用 没有就在里面新建
第二种方式 新建一个 它首先也会去缓冲区里边查找 不管有没有 它都会在堆里新建一个 如果缓冲区里面没有 则在缓冲区里面也新建一个·

例如string s=“tt”
string s1=“tt” s等于s1
而 string s=new string(“ss”)
string s1=new string(“ss”) s不等于s1