博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串相等的判断
阅读量:6906 次
发布时间:2019-06-27

本文共 566 字,大约阅读时间需要 1 分钟。

  hot3.png

System.out.println("a" == "a");

System.out.println("a"+"b" == "ab" );
System.out.println("a".toLowerCase()=="a" );
System.out.println( "a"+"b".toLowerCase() == "ab" );
System.out.println("A".toLowerCase()=="a");
结果分别是true true true false false

编译器在遇到代码里两个常量String相加时,会在编译期就加起来,在代码运行时实际的代码应该是System.out.println("ab" == "ab" ); 

而String常量在常量池中只存在一份,所以前一个"ab"和后一个"ab"指向同一个对象,故返回True
而编译器并不会在编译期对String.toLowerCase()这个函数进行处理,在代码执行期间,"b".toLowerCase()返回"b",a+b返回ab,此时的ab是在代码运行期间被new出来的,存在与堆中,与后一个ab(存在于常量池中)指向的并不是同一个对象,故返回false

转载于:https://my.oschina.net/wayhk/blog/406400

你可能感兴趣的文章
发布一个开源的c++网络事件库 - 知然 - 博客园
查看>>
XTU1201:模和除
查看>>
Linux下chkconfig命令详解
查看>>
用JavaScript实现让浏览器停止载入页面
查看>>
[原创]FineUI秘密花园(九) — 表单验证
查看>>
使用jQueryUI的dialog实现一个提示功能
查看>>
2014年西昌邛海湿地马拉松赛
查看>>
ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接
查看>>
lua学习项目笔记
查看>>
Git_期末总结
查看>>
C文件操作的语言fgets()
查看>>
Python迭代器和生成器
查看>>
MFC office2007风格设置左侧导航栏 [转]
查看>>
Mysql游标
查看>>
struts2获得提交是get还是post方法提交
查看>>
开源任务管理平台TaskManagerV2.0介绍及升级说明
查看>>
Java程序员的日常——经验贴(纯干货)
查看>>
Spring配置文件头及xsd文件版本
查看>>
一个简单的Android富文本TextView实现
查看>>
iOS:个人浅谈工厂模式
查看>>