如果我们在 java 中通过字符串文字制作三个字符串 字符串 A = "hel" + "lo" ;字符串 B = "lo" ;字符串 C = "hel" +B; 。A == C 为真,但显示为假



如果我们通过字符串字面量在java中创建三个字符串string = "hel"+"lo";字符串B = "lo";字符串C = "hel"+B;. A == C为真,但输出为假。因为两者将在stringpool中共享相同的内存。我有点不明白为什么会发生这种事。

输出false的代码:

public class Main {
public static void main(String[] args) {
String A = "hel" + "lo";
String B = "lo";
String C = "hel" + B;
System.out.println(A == C);
}
}

打印true的代码:

public class Main {
public static void main(String[] args) {
String A = "hel" + "lo";
String B = "lo";
String C = "hel" + "lo";
System.out.println(A == C);
}
}

为什么我得到不同的结果,因为两者是相同的?

本例中的问题

public class Main {
public static void main(String[] args) {
String A = "hel" + "lo";
String B = "lo";
String C = "hel" + B;
System.out.println(A == C);
}
}

表示变量B是可变的,因此表达式"hel" + B不是常量表达式。

编译器将String C = "hel" + B;行翻译成类似于

的内容
String C = "hel".concat(B);

生成一个新的字符串对象,该对象与字符串字面值"hello"不同。


如果将B变为常量变量并写入

public class Main {
public static void main(String[] args) {
String A = "hel" + "lo";
final String B = "lo";
String C = "hel" + B;
System.out.println(A == C);
}
}

则表达式"hel" + B是常量表达式,编译器可以计算该表达式的值。

Java String类equals()方法根据字符串的内容比较两个给定的字符串。==操作符比较的是引用而不是值。试着理解下面的程序,你就会知道其中的区别了。

String A = "hel" + "lo";
String B = "lo";
String C = "hel" + B;
System.out.println(A.equals(C)); //true 
class Teststringcomparison{  
public static void main(String args[]){  
String s1="Sachin";  
String s2="Sachin";  
String s3=new String("Sachin");  
System.out.println(s1==s2);//true (because both refer to same instance)  
System.out.println(s1==s3);//false(because s3 refers to instance created in nonpool)  
}  
}  

相关内容

  • 没有找到相关文章

最新更新