String s1 = "Amit"; //true
String s2 = "Amit"; //true
String s3 = new String("abcd"); //true
String s4 = new String("abcd"); //false
System.out.println(s1.equals(s2)); //true
System.out.println((s1==s2)); //true
System.out.println(s3.equals(s4)); //false
System.out.println((s3==s4)); //false
假设上述代码的输出为
的主要原因true true true false而不是true true false false ???
答案 0 :(得分:3)
Java使用“字符串文字池”。由于字符串是不可变对象,因此没有理由将两个初始化为同一文字的字符串不能是同一个对象 - 并且正如您的代码输出所示,它们是同一个对象。 (s1和s2是内存中相同位置的两个名称)
对于s3和s4,这是不正确的原因是因为你明确地分配了新的字符串,并使用构造函数来初始化它们。这意味着它们是不同的对象,因此它们无法通过“==”测试。
换句话说,
==比较两个对象引用是否相等
.equals()比较两个对象的内容是否相等,而不管它们在内存中的位置。
答案 1 :(得分:2)
我不会直接回答你的问题,因为它似乎是家庭作业,但你要找的是:
<强> ==, .equals(), compareTo(), and compare() 强>
上面的链接讨论了字符串内容相等性和字符串引用相等性。这就是你的问题本质上,它提供了解释概念的好方法。
答案 2 :(得分:0)
public class Question {
private int one;
public void myMethod(int one){
this.one = 30;
int one1 = 12;
}
}
class Test{
public static void main(String[] arg){
int one = 30;
Question q = new Question();
q.myMethod(one);
System.out.println(one);
}
}