- 判断定义为String类型的s1和s2是否相等
String s1 = “abc”;
String s2 = “abc”;
System.out.println(s1 == s2);//true
System.out.println(s1.equals(s2));//true
解析:常量池(常量池是在方法区中的)中没有这个字符串对象就创建一个,如果有就直接用,所以s1和s2都指向”abc”
- 下面这句话在内存中创建了几个对象
String s1 = new String(“abc”);
两个对象,一个在常量池中,一个在堆内存中
依据:在API中,
public String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
这两个对象的地址值是不一样的
- 判断是否相等
String s1 = new String(“abc”);//记录的是堆内存的地址值
String s2 = “abc”;//记录的是常量池内存的地址
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true
- 判断是否相等
String s1 = “a” + “b” + “c”;/Java中有常量优化进制,在编译的时候”a” “b” “c” 就变成了”abc”
String s2 = “abc”;
System.out.println(s1 == s2);//true
System.out.println(s1.equals(s2));true
- 判断是否相等
String s1= “ab”;
String s2 = “abc”;
String s3 = s1 + “c”;//Java中是常量优化机制,而s1不是常量
System.out.println(s3 == s2);//false
System.out.println(s3.equals(S2);//true