【问题标题】:s[0] and args[0] contains "java" still the comparison result is different for == operator in print and main method [duplicate]s[0] 和 args[0] 包含“java”,但 print 和 main 方法中 == 运算符的比较结果不同 [重复]
【发布时间】:2017-05-02 23:59:22
【问题描述】:

为什么我做System.out.println(s[0] == "java");System.out.println(args[0] == "java");时会得到不同的值

public class StringDemo {
    static void print(String[] s) {
        System.out.println(s[0] == "java");
    }

    public static void main(String[] args)
    {
        // java is passed as command line argument
        System.out.println(args[0] == "java");
        String s[] = new String[3];
        s[0] = "java";
        print(s);
    }
}

【问题讨论】:

  • 这里是完整的代码
  • 我在两个语句中都使用 == 这不是重复的
  • 虽然args[0]s[0] 都包含对带有字符java 的字符串的引用,但它们不包含对同一字符串对象的引用。 s[0] 包含对实习字符串 java 的引用,它与您通过编写字符串文字“java”引用的字符串对象相同。然而,JVM 的命令行解析器不会在 args[0] 中传递对这个字符串字面量的引用,它会为您传递的所有参数创建一个新的字符串对象。
  • @Gendarme 命令行解析器不知道存在哪些字符串文字,所以它只是创建新的字符串对象。而且:不,不是每个字符串对象也必须是字符串文字。

标签: java string pass-by-reference


【解决方案1】:

问题是因为您比较的是地址,而不是值。

如果你想比较价值,你需要使用.equals 方法:

System.out.println(args[0].equals("java"));

 System.out.println(s[0].equals("java"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多