常量存入常量池的三种区别

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 是实例变量,每个实例都有自己的引用,但都指向同一个常量池中的字符串对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值