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

时间:2012-09-04 03:01:36

标签: 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" );
}}

我将此程序运行为:

java TestArgs 1 2 3

我希望输出为“truetrue”,但我得到“truefalse”

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

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

这是因为您在使用==时正在比较对象的引用。在进行String比较时,请使用.equals()代替==。这SO answer更好地解释了原因。

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

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]));
    }
}

此外,并且这与此答案没有直接关系,在使用该操作进行任何操作之前检查args的长度始终是个好主意。原因是最终用户可能没有为args[2]

提供任何值

答案 2 :(得分:2)

==运算符按引用比较对象。