【发布时间】: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