SuperHurley 2017-09-09 07:59 采纳率: 100%
浏览 1611
已采纳

字符串==与equals例题

String s1 = "1"+"23"+"abc";
String s2 = "1"+23+"abc";
System.out.println(s1==s2);//false

为啥为false?(!!!问题有误,请看仔细了,否则后果自负!)
另外,自定义类未重写toString(),打印结果为 “类名@散列值”,那么对于重写过toString()方法的API,如何查看这种结果?

天灵灵地灵灵,java大神快显灵!

  • 写回答

9条回答 默认 最新

  • qing_xi_yxq 2017-09-09 09:21
    关注

    楼主的运行结果都是应该为true,前面已经有坛友验证了。本人比楼主早学了几个月,也看了很多前辈的解答,现整理解答下。
    1、==与equals,对于绝大部分对象而言,两者默认都是比较内存地址(String例外,因为已经被重写为比较字符串内容了)。
    2、常量池与String不可变类,java程序中,每个String对象都是不可变的(方便重用与管理,具体看书),而且创建后会被缓存在常量池。
    3,编译器预处理,对于字符串字面值直接连接,如s1="123"+"abc",预编译阶段会生成字符串常量“123abc”缓存在常量池,而在执行s2=“12”+“3abc”,会先检查常量池,因为已经存在,则直接把之前的常量池的地址赋值给s2,而如s3=s1+s2在编译阶段不能确定值的,会在运行时处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog