final关键字,想请问一下下面的为什么是TRUE

不 羡 仙 2019-07-09 10:18:22
final修饰成员变量必须显示初始化,可是这跟s6有关系吗?
...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2019-07-11
  • 打赏
  • 举报
回复
引用 楼主 qq_42963930 的回复:
final修饰成员变量必须显示初始化,可是这跟s6有关系吗?
final会吧数据放入常量池,让后传递给变量的是常量池中的地址,所以运算也会在常量池中进行,相当于进行了基本类型的运算。基本类型可以直接用==比较,常量池中值相等必定地址相等。而普通的string变量被赋予相当于new ,所以普通的string无法用==来比较。
toward_south 2019-07-10
  • 打赏
  • 举报
回复
final指向引用数据也就是String类的时候,他指向变量的地址是不会改变的。 == 对于数字来说是比较其大小,而对对象来说,比较的是引用地址。 像 “hello”,"world"这些字符串存放在常量池里面,当s4,s5声明的时候,他会先去常量池里面找,找不到才在常量池里创建。因为之前s1,s2创建的时候已经声明,所以s4,s5直接获取到常量池中的地址。如果你比较下会发现s1 == s4, s2 == s5是true。这和final 修饰没多大关系。 同时s3进行+字符串的拼接,本质是调用了StringBulider这个类的append方法 而s6再次进行拼接的时候,因为s4,s5被final修饰,s6同时也被默认声明为final 修饰,s4,s5拼接的结果是helloworld ,所以将直接找到s的地址,返回给s6,这时候s6 和s的地址是相同的,所以==比较的时候就返回true了。 以上观点只是我的个人理解和猜想
  • 打赏
  • 举报
回复
的确跟final有关系,不加final就是false,mark

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧