1. public static String str1 = "str1";
- 当这行代码执行时,字符串字面量
"str1"会被放入常量池中。 str1将会引用这个常量池中的对象。- 如果在程序中多次使用
"str1",Java会重用常量池中已存在的"str1"字符串对象,而不会创建新的实例。
2. public static final String str2 = "str2";
- 与
str1类似,这里的字符串字面量"str2"也会被放入常量池中。 - 由于
str2是static final的,表示它是一个常量,因此可以在编译时进行优化。在大多数情况下,编译器会直接用"str2"替换所有对str2的引用。 - 这意味着只要有任何地方引用
str2,编译器会用常量值替换,而不是通过变量访问。
3. public String str3 = "str3";
- 对于这行代码,字符串字面量
"str3"同样会被放入常量池中。 - 但是,
str3是一个实例变量(非static),因此每个该类的实例都会有自己的str3引用指向常量池中的"str3"对象。 - 也就是说,尽管常量池中只有一个
"str3"字符串对象,但每个对象都有自己独立的str3引用。
总结
- 常量池中会分别添加
"str1"、"str2"和"str3"三个字符串字面量。 str1和str2都是静态的,其中str2是常量,可能在编译时进行优化。str3是实例变量,每个实例都有自己的引用,但都指向同一个常量池中的字符串对象。

2742

被折叠的 条评论
为什么被折叠?



