输出以下代码

时间:2010-03-24 05:52:54

标签: java oop

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 ???

3 个答案:

答案 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);
    }
}