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 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档