为什么我不能像其他字符串数组那样比较命令行参数?

MrD*_*ail 3 java string equals

main(String[] args)我的例子似乎与其他字符串数组之间存在差异,我无法弄清楚.

public class TestArgs 
{
public static void main(String[] args) {
    String[] x = {"1","2","3"};
    System.out.print( x[2] == "3" );
    System.out.print( args[2] == "3" );
}}
Run Code Online (Sandbox Code Playgroud)

我运行这个程序:

java TestArgs 1 2 3
Run Code Online (Sandbox Code Playgroud)

我希望输出是"真实的",但我得到"truefalse"

有人可以告诉我有什么区别,或者我只是在做一些非常愚蠢的事情......

The*_*eHe 8

在java中,你必须用来"test".equals("test")测试字符串相等性;)

字符串是对象,对象不是SAME,它们只有相同的VALUE

  • @MrDetail由于Java内部化字符串的方式.而不是创建两个"3"实例,Java创建了一个,因此就Java而言,参考位置实际上是相同的.这就是为什么TheHe的解决方案如此重要 (4认同)

Suj*_*jay 5

那是因为您在使用时比较了对象的引用==.在进行比较时String,请使用.equals()而不是==.这个答案更好地解释了原因.

所以你的代码会变成这样:

public class TestArgs {
    public static void main(String[] args) {
        String[] x = {"1","2","3"};
        System.out.print("3".equals(x[2]);
        System.out.print("3".equals(args[2]));
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,这与此答案没有直接关系,args在使用该操作进行任何操作之前检查您的长度总是一个好主意.原因是最终用户可能没有提供任何值args[2]