gpt4 book ai didi

java - 比较字符串引用

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:09 26 4
gpt4 key购买 nike

我想了解 Java 中的引用比较。假设我们有以下主要代码:

public static void main (String args[]) {
String str1 = "Love!";
String str2 = "Love!";
String str3 = new String("Love!");
String str4 = new String("Love!");
String str5 = "Lov"+ "e!";
String str6 = "Lo" + "ve!";
String s = "e!";
String str7 = "Lov"+ s;
String str8 = "Lo" + "ve!";
String str9 = str1;
}

我理解 str1 == str2 == str5 == str6 == str8 == str9 并且它们都是对公共(public)池的相同引用。 (值(value)“爱!”)。s 也是对公共(public)池的引用,但它引用值“e!”

我也明白 str1 != s

我知道str3,str4是对HEAP的引用,它们各自是不同的Object。 str3 != str4.

我不明白为什么 str1 != str7 我很想得到解释。

最佳答案

String s = "e!";
String str7 = "Lov"+ s;

"e!" 是常量表达式,s 不是常量变量 (JLS §4.12.4) ;因此,引用 s"Lov"+ s 不能是常量表达式 (JLS §15.28) .为了使像 s 这样的变量成为常量变量,它需要既是 final 又是从常量表达式初始化的。

如果你写过

final String s = "e!";
String str7 = "Lov" + s;

那么 str1 == str7 就是真的。

关于java - 比较字符串引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com