(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