只有查看class才能找到答案的面试题

本文探讨了Java中将其他类型转换为字符串的不同方法,并通过实验对比了它们的执行速度,揭示了Java编译器在字符串转换上的优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  String a = null + "a";
  String aa = null + "a";
  System.out.println(a == aa);

 

输出false
 

  String a = "null" + "a";
  String aa = "null" + "a";
  System.out.println(a == aa);

 

输出true

 

我当时答的都为true,因为我觉得结果都为字符串a,所以应该都在常量池里吧。但实际结果却让我吃惊,最后我用了一下午的时间终于找到了答案:

 

原因:(经查看相应的CLASS文件(也可以看反编译),得出以下结论)

第一个:实现原理为StringBuilder.append.toString,即产生了新的对象
第二个:编译器直接搞为String

 

启发:

由其他类型转换为字符串类型可以采用以下方法:

1.调用String.valueOf(目标对象)

2.目标对象+""

经过我本地测试发现第二种要比第一种速度快,(如果目标对象是基本数据类型的时候,会快很多)。原因我就不多说了吧。第二种编译器已经做了类型转换了,执行显然快了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值