Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 为什么Eclipse允许使用==进行字符串比较?_Java_String - Fatal编程技术网

Java 为什么Eclipse允许使用==进行字符串比较?

Java 为什么Eclipse允许使用==进行字符串比较?,java,string,Java,String,我理解并知道为什么在java中通常必须使用==来比较字符串,但出于某种原因,我能够在Eclipse中进行比较。我的代码是 代码: 为什么从命令行使用javac打印“wtf”却不打印?Eclipse允许您比较引用,因为它是合法的比较。只是可能不是你真正想要的 由于字符串实习,它有时看起来会起作用,但除非你知道你正在比较的字符串已经实习,否则你不应该依赖它。比较字符串是否相等的正确方法是使用.equals它允许比较两个地址可能比比较两个字符串更快(但请谨慎使用,您可能永远不必比较两个字符串地址) 有

我理解并知道为什么在java中通常必须使用==来比较字符串,但出于某种原因,我能够在Eclipse中进行比较。我的代码是 代码:


为什么从命令行使用javac打印“wtf”却不打印?

Eclipse允许您比较引用,因为它是合法的比较。只是可能不是你真正想要的


由于字符串实习,它有时看起来会起作用,但除非你知道你正在比较的字符串已经实习,否则你不应该依赖它。比较字符串是否相等的正确方法是使用
.equals

它允许比较两个地址可能比比较两个字符串更快(但请谨慎使用,您可能永远不必比较两个字符串地址)


有时候比较对象内存地址是很有用的,只要字符串是一个对象,eclipse就允许您使用
=

进行比较行为是不确定的——有时有效,有时无效——这正是它与最佳实践相反的原因。这不是第一百万次提出这个问题吗?你问它的方式表明你不知道什么时候应该使用==@CharlesDuffy他在问为什么它在命令行中不起作用,但在Eclipse中起作用。该代码应该是完全合法和确定的。根据JLS,这种比较结果应该为真。我很难相信命令行中的javac不会在这里打印
wtf
。我会补充一个澄清。我理解这一点,但它总是有效的。它从来都不起作用。无论我运行代码多少次,它都能正常工作。@inuasha Java语言保证编译时常量字符串(通常是带引号的字符串文本)被插入,因此
“foo”==“foo”
始终为真,但
新字符串(“foo”)==新字符串(“foo”)
不是。它总是在这个特定的代码中起作用,因为字符串文本总是被隐藏的,并且您在两个位置都使用了相同的字符串文本。与您的第二段相反,绝对没有理由不依赖
=
来比较字符串文本。JLS保证它会工作。
public class Test{
    public static void main(String [] args){
        String str1 = "string";
        if(str1 == "string"){
            System.out.println("wtf");
        }
    }
}