String s = " " 和String s = new String(" ")的区别
用简单的方式理解String s = " " 和String s = new String(" ")的区别。
String a = "aaa";
String b = new String("aaa");
System.out.println(a==b);
false
通过“==”的比较不是指数值的比较而是对地址的比较,因为 String b = new String(“aaa”); 会在堆中创建一个新的对象,所以 b 指向的其实是堆中的对象,而不是堆中的常量池。
String a = "aaa";
String b = "aaa";
System.out.println(a==b);
true
在这里 a 和 b 都指向的是堆中的常量池中的同一个值,所以地址一样。
String a = "aaa";
String b = new String("aaa");
System.out.println(a.equals(b));
true
使用equals比较的是值,所以是相等的。
**
再来一个例子
String a = "aaa";
String b = new String("aaa");
b = b.intern();
System.out.println(a==b);
true
intern()的作用是把aaa的地址发回给b。
本文深入探讨了Java中String实例化的两种方式:直接赋值和new关键字创建的区别。通过代码示例,解释了两者在内存分配上的不同,以及如何使用equals和==进行字符串比较。此外,还介绍了intern()方法的作用。
1699

被折叠的 条评论
为什么被折叠?



