考虑以下代码:
public static void main( String args[] ) throws Exception{
String a = "sharmaji";
String b = args[0];
System.out.println(a==b);
}
现在,如果我将a命令行参数传递为“sharmaji”,那么a==b返回false。这表明java使用new string(…)参数来创建字符串。
是因为java必须将用户输入读取为字节,然后将其转换为字符串吗?
2条答案
按热度按时间2nbm6dog1#
您传递的参数是一个运行时值,在堆中作为新对象创建,但是
String a = "sharmaji";
是编译时常量,并放入字符串文字池中。想象一下,每当您通过命令行传递任何字符串时,它都是这样发生的-
那就好像-
因此创建了新对象,因此其引用不能与您正在检查的对象相同
==
接线员。但你看到这个案子了吗
因为这里数组的值是在编译时初始化的,所以“asd”的引用与
s1[0] and s
,打印TRUE
xnifntxz2#
这是因为从命令行参数创建的字符串是在
runtime
编译器对它们一无所知(什么值会被传递到程序中)。考虑示例3.10.5-1。jls的字符串文本,以便更好地理解java如何使用其内部字符串“cache”。