在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"会先去找字符串池中有没有,没有才会创建

关于String对象的初始化问题
String a=new String("abc");String b="abc";System.out.println(a==b);System.out.println(a.equals(b));你可以试一试上面的代码。第一个是false,第二个是true。关键就在于“==” 和 equals 方法,一个比较的是对象,一个比较的是引用。“==”比较的是引用,也就是上面的a和b的的位置...

Java中String直接赋值和使用new的区别
直接赋值的String是以常量的形式存放在推中的,在同一个程序中 String a="abc";String b="abc";a==b返回的结果是true 他们指向的地址是同一个 而new会重新分配内存给每个String分配不同的内存空间 String a=new String("abc");String b=new String("abc");a==b返回的结果是false,他们指...

String s = new String("abc");在内存中有几个对象?
abc 首先是要存放在常量 区的 如果 之前用过abc字符串, 也就是之前常量池区有abc这个字符串,那么new String("abc"),就只新加了一个对象,如果之前没有abc字符串,那就要先存在常量池区,然后才生成s对象 所以要创建两个对象 按你的问题, 内存中肯定会有两个对象, 三块内存分配: 分别是 s...

java 判断字符串是否相等
这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象;再比如:String a=new String("abc"); String b=new String("abc");那么a==b将返回false,因为a和b指向不同的对象。2、用equals方法,该方法比较的是字符串的内容是否相同,比如:Str...

Java里为什么string不用new呢?又不是基本数据类型。
String b = "tom";在上诉代码中,变量a和b使用的是缓冲区中的同一个存储对象。在使用String构造方法定义对象时,Java环境会和创建其他类型的对象一样,每次调用时,都会去创建一个新的对象。示例代码如下:String a = new String("tom");String b = new String("tom");在上述代码中,变量a 和...

java中String new和直接赋值的区别
public static void main(String[] args) { String a = new String(); \/\/ 在堆中生成对象s,在 字符串池中创建空字符串 String aa = ""; \/\/ 字符串池中已经存在空字符创,不用再创建了 String aaa = new String("");\/\/ 堆中生成对象aaa,并在 字符串池中创建空字符串 String b = ...

java 字符串变量赋值例如 String a="abc"; String b; b=a; b="
String a = "abc"; \/\/ 定义了一个 "abc" 字符串 ,a 指向 这个字符串String b;b = a; \/\/ 使b也指向 a现在指向的那个字符串("abc")b = "abcd"; \/\/ 定义了一个"abcd" 字符串,b 指向 这个新的字符串在内存中大致的示意图如下:所以最后 a =“abc”,b=“abcd”java中...

java新手请教java大师: string A=a;string B=a; A=B吗?
String str=new String("abc");* 所有通过new操作符的操作都是在堆完成的 它创建两个对象 abc对象和str引用对象 两个必须存放在堆中 str指向堆中的abc对象 也就是说 两个对象和str的地址全部存放在堆中 因为使用了new操作符 所以下面的例子里str2,str3和str4即使是值都为abc因为str2的地址在...

java:两句相同的 String a=new String("abc"); 创造几个对象
栈里只有引用好不,堆才是存对象的 因为==运算比较内存地址,所以可以用它判断堆里有几个对象 System.out.println("abc"=="abc");System.out.println(new String("abc")=="abc");System.out.println(new String("abc")==new String("abc"));结果:true false false so,三个 ...

Java中String直接赋字符串和new String的区别
直接赋值是在常量池寻找字符串,new的会创建对象 看这个 String a="abc",b="abc";String A=new String("abc")B=new String("abc")a==b 是true A==B 是false

相似回答