Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 对于字符串比较,==为什么返回true?_Java_String - Fatal编程技术网

Java 对于字符串比较,==为什么返回true?

Java 对于字符串比较,==为什么返回true?,java,string,Java,String,我之前问过一个关于比较两个字符串的问题,他们告诉我应该始终使用.equals 但是,我不明白为什么会这样: String y= "Mary"; String x= "Mary"; System.out.print(x==y); 这将是真的,我不明白为什么 因为这两个字符串具有相同的引用标识,这是因为它们来自池。如果要向其中一个字符串添加新字符串(),如下所示- String y= "Mary"; String x= new String("Mary"); System.out.print

我之前问过一个关于比较两个字符串的问题,他们告诉我应该始终使用.equals

但是,我不明白为什么会这样:

 String y= "Mary";
 String x= "Mary";
 System.out.print(x==y);
这将是真的,我不明白为什么

因为这两个字符串具有相同的引用标识,这是因为它们来自池。如果要向其中一个字符串添加
新字符串()
,如下所示-

String y= "Mary";
String x= new String("Mary");
System.out.print(x==y);

你会得到
false

,因为
y
x
都指向字符串常量池中的同一个对象。这是编译器和JVM的一个实现细节。“这是编译器和JVM的一个实现细节”-实际上,这是Java规范所要求的。这不仅仅是一个实现细节。更详细一点的字符串池,这就是为什么您应该始终使用。Equals为什么否决?。这个答案怎么了?