在java 中 String a=New String("abc") 与Strng b="a

在java 中
String a=New String("abc")

与Strng b="abc" 有什么区别

前面那个是定义了一个String类对象a 并赋值为abc。此时的a是一个实例化对象
后面的b 是定义了一个String字符串变量 ,赋值abc 。顺便说一句 后面一句少了一个i

也可以这么理解:
String b= "abc"; 先在内存中找是不是有"abc" 这个对象,
如果有,就让b指向那个"abc".如果内存里没有"abc",就创建一个新的对象保存"abc".
String a=new String ("abc") 就是不管内存里是不是已经有"abc"这个对象,
都新建一个对象保存"abc"追问

这样的话 我先String a=New String("abc")然后再String b="abc" 再然后a==b 返回的是true还是false?

追答

这个问题 是true和false 你可以写个简单的代码 到eclipse运行一下马上就能知道结果了。 代码是最有说服力的 。

追问

是false

追答public class StrExam {
public static void main(String[] args) {
String a = new String("abc");
String b = "abc";
System.out.println(a == b);
System.out.println(a.equals(b));
}
}

第一个是false  第二个是true 

追问

嗯嗯 谢谢

String a="abc" String b="abc" a==b返回的是true

追答

  >_<

追问

什么表情?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-03
第一个 不管堆中是否存在abc 都要开辟一个新的,
第二个 如果堆中间存在abc 则直接引用,否则重新开辟
所以a和b的地址不同追问

哦哦

第2个回答  推荐于2018-04-11
new 的String对象会直接放入堆内存中,每次创建会开辟一个空间存放,
=号赋值的string对象会放入一个字符串池中,创建新对象的时候会先在里面查找,不存在才会开辟空间存放字符串,你再string c="abc",c和b会指向同一个空间
楼主可以试试追问

哦哦

本回答被网友采纳
第3个回答  2015-04-03
类型不同吧
a 是对象
b 是简单类型
a == b // 比较两者的值
a.equals(b) // 比较两者的类型 你试试
第4个回答  2015-04-03
String a=New String("abc")先创建一个abc对象,Strng b="abc"会先去找字符串池中有没有,没有才会创建
相似回答