Java 以下代码的输出
假设上面代码的输出是Java 以下代码的输出,java,oop,Java,Oop,假设上面代码的输出是 是真是假与非真是假???我不会直接回答你的问题,因为这似乎是家庭作业,但你要找的是: 上面的链接讨论字符串内容相等和字符串引用相等。这就是你的问题的本质,它提供了一个很好的解释概念的方式。我不打算直接回答你的问题,因为这似乎是家庭作业,但你想要的是: 上面的链接讨论字符串内容相等和字符串引用相等。这就是您的问题的本质所在,它提供了一种很好的解释概念的方法。Java使用“字符串文字池”。因为字符串是不可变的对象,所以没有理由初始化为相同文字的两个字符串不能是同一个对象,正
是真是假与非真是假???我不会直接回答你的问题,因为这似乎是家庭作业,但你要找的是:
上面的链接讨论字符串内容相等和字符串引用相等。这就是你的问题的本质,它提供了一个很好的解释概念的方式。我不打算直接回答你的问题,因为这似乎是家庭作业,但你想要的是: 上面的链接讨论字符串内容相等和字符串引用相等。这就是您的问题的本质所在,它提供了一种很好的解释概念的方法。Java使用“字符串文字池”。因为字符串是不可变的对象,所以没有理由初始化为相同文字的两个字符串不能是同一个对象,正如您的代码输出所表明的,它们是相同的对象。(s1和s2是内存中同一位置的两个名称) 对于s3和s4来说,这是不正确的,因为您显式地分配新字符串,并使用构造函数初始化它们。这意味着它们是不同的对象,因此无法通过“==”测试 换句话说, ==比较两个对象引用是否相等 .equals()比较两个对象的内容是否相等,而不考虑它们在内存中的位置。Java使用“字符串文字池”。由于字符串是不可变的对象,没有理由初始化为相同文字的两个字符串不能是同一个对象,正如代码输出所示,它们是相同的对象。(s1和s2是内存中同一位置的两个名称)
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
对于s3和s4来说,这是不正确的,因为您显式地分配新字符串,并使用构造函数初始化它们。这意味着它们是不同的对象,因此无法通过“==”测试
换句话说,
==比较两个对象引用是否相等
.equals()比较两个对象的内容是否相等,而不考虑它们在内存中的位置。很抱歉,我现在意识到了这一点。。对不起,我现在意识到了。。它==在第四位,而不是第三位。@Kyle啊,是的,看起来确实像是家庭作业,不是吗?我的错。但是只要他学会了这个概念,对吗?呵呵,是的,凯文,这就是为什么我在链接中加入了这个信息:)@Kyle啊,是的,这看起来像是家庭作业,不是吗?我的错。但是只要他学会了这个概念,对吗?呵呵,是的,凯文,这就是为什么我在链接中加入了这个信息:)我不会把它称为完全重复的沙希。很抱歉混淆了。。我没有把这个问题标为重复问题。只是我提供的链接仅供参考。你真的应该为你的问题提供一个更好的标题。我不会说这是一个完全重复的沙石。很抱歉造成混淆。。我没有把这个问题标为重复问题。只是我提供的链接仅供参考。你真的应该为你的问题提供一个更好的标题。没有解释吗?为什么这是一个答案?没有解释?为什么这是一个答案?
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