java String s = "hello";String d = "hello";String a = new String("hello");

为什么s == d是true;而s ==a是false;不是有个常量池吗?
2025-03-11 15:37:19
推荐回答(2个)
回答(1):

如果是直接赋值的是取常量池的数据, 如果是new的,永远都是重新创建内存.
所以 s == d 因为在object比较中 ==比较的是内存地址, 而new String()是告诉jvm重新创建一块内存.

回答(2):

new的对象不再常量池里面的,而直接用string定义的时候他是先在常量池里面去找,找到了就把字符串的引用给他,没找到就把这个字符串放到常量池。new的string凭字面意思也是说我要一个新的啊,所以肯定就不是已经存在的。不知道是否明白。