Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以下代码的输出_Java_Oop - Fatal编程技术网

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