(1)
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true or false
System.out.println(str1.equals(str2));//true or false
(2)
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2); //true or false
System.out.println(str1.equals(str2));//true or false
(3)
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1==str2); //true or false
System.out.println(str1.equals(str2));//true or false
(4)
String str1 = new String("abc");
String str2 = str1
System.out.println(str1==str2); //true or false
System.out.println(str1.equals(str2));//true or false
答案:
(1)知识点:程序在运行中会创建字符串缓存区。
例String str1=“abc” 、String str2=“abc”
String str1=“abc”,会从字符串缓存区中创建“abc”,str1引用“abc”。
String str2=“abc”,会先从字符串缓存区中找到相同值的对象str1,str2引用str1所引用的对象。
所以str1和str2的地址和值是相同的
(2)String str1 = "abc";
String str2 = new String("abc");
知识点:
String str1 = "abc"; 创建1个“abc”对象
String str2 = new String("abc"); 创建了2个对象“abc”对象和str2对象
str1和str2比较的对象不同,所以地址不同,但值相同。
//(1)
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
System.out.println(str1.equals(str2));//true
// (2)
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2); // false
System.out.println(str1.equals(str2));//true
// (3)
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1==str2); // false
System.out.println(str1.equals(str2));//true
//(4)
String str1 = new String("abc");
String str2 = str1;
System.out.println(str1==str2); //true
System.out.println(str1.equals(str2));//true
文章讨论了Java中String对象通过`==`和`.equals()`方法进行比较的情况。当使用`==`时,比较的是对象的内存地址,而`.equals()`则比较对象的值。对于常量池中的字符串,`==`会返回true,而对于通过`newString()`创建的实例,`==`返回false,除非它们指向同一个对象。所有情况下,`.equals()`都基于值进行比较,如果值相同,则返回true。
1039

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



