【问题标题】:Output of the following code以下代码的输出
【发布时间】:2010-03-24 05:52:53
【问题描述】:
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

假设上面代码的输出主要是为什么

真真真假与非真真假假???

【问题讨论】:

  • 我不会称其为完全相同的沙市。
  • 抱歉给您带来了困惑。我没有将此问题标记为重复。只是我提供的链接供参考。
  • 你真的应该为你的问题提供一个更好的标题。

标签: java oop


【解决方案1】:

Java 使用“字符串文字池”。由于字符串是不可变的对象,因此初始化为相同文字的两个字符串没有理由不能是同一个对象——正如您的代码输出所示,它们是同一个对象。 (s1 和 s2 是内存中同一位置的两个名称)

这对于 s3 和 s4 不正确的原因是因为您显式分配了新字符串,并使用构造函数来初始化它们。这意味着它们不同的对象,因此它们无法通过“==”测试。

换句话说,

== 比较两个对象引用是否相等

.equals() 比较两个对象的内容是否相等,而不管它们在内存中的位置。

【讨论】:

  • @Kyle 啊,是的,这看起来像是家庭作业,不是吗?我的错。但只要他学会了这个概念,对吧?
  • 呵呵,是的,凯文,这就是我在链接中添加信息的原因:)
【解决方案2】:

我不会直接回答你的问题,因为这似乎是家庭作业,但你要找的是这个:

==, .equals(), compareTo(), and compare()

上面的链接讨论了字符串内容相等和字符串引用相等。这就是您的问题的本质,它提供了一种解释概念的好方法。

【讨论】:

  • 对不起,我现在意识到了.. 它的 == 在第四而不是第三。
【解决方案3】:
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);
    }
}

【讨论】:

  • 没有解释?为什么这是一个答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
相关资源
最近更新 更多