【问题标题】:Why can't i compare command line arguments like other string arrays? [duplicate]为什么我不能像其他字符串数组一样比较命令行参数? [复制]
【发布时间】:2012-08-28 16:27:02
【问题描述】:

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

我希望输出是“真真”,但我得到的是“真假”

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

【问题讨论】:

  • 天真,也许吧。不太傻。
  • ..I get "truefalse" 使用println 的绝佳案例。 ;)

标签: java string equals


【解决方案1】:

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

字符串是对象,对象不是相同的,它们只是具有相同的值

【讨论】:

  • 但如果是这样的话,为什么我创建的字符串可以使用 == 运算符,而不是 main(String[] args) 创建的字符串?
  • @MrDetail 因为 Java 内部化字符串的方式。 Java 没有创建“3”的两个实例,而是创建了一个,因此就 Java 而言,引用位置实际上是相同的。这就是 TheHe 的解决方案如此重要的原因
  • 是的-谢谢@MadProgrammer
【解决方案2】:

== 运算符通过引用比较对象。

【讨论】:

    【解决方案3】:

    这是因为您在使用== 时比较了对象的引用。在比较 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] 提供任何值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 2018-07-07
      • 2013-07-16
      • 2023-03-13
      • 2014-11-25
      • 1970-01-01
      • 2018-09-02
      相关资源
      最近更新 更多