折腾了一晚上的“equals”和“==”
2018-11-26 07:56:04来源:博客园 阅读 ()
最近在仿写美团这个项目的时候,遇到了一点关于字符串比较的问题,这里记录一下,避免以后再犯。
由于之前学c语言的时候,习惯性用“==”进行比较,初识Java,不知道有什么别的方法可以进行字符串比较,于是就将c语言中那一套直接搬过来,发现Android studio没有报错,并没有太在意,软件一运行,就发现不对了,我要比较的两个字符串明明是一样的,然而运行结果却出人意料,甚至比较之前用Toast显示一遍都发现字符串一模一样,上网一查才发现字符串比较有别的方法。
首先要从Java的数据类型说起,Java中数据类型分为基本数据类型和引用数据类型,而字符串String是属于引用类型的,顾名思义,引用数据类型的变量在Java中储存的不是数据本身,而是一个地址值,这样一来,如果直接用“==”比较两个字符串的话,系统内部比较的是两个字符串的储存地址,而不是String数据本身,这样一来就造成了上述我所遇到的问题。
解决这一问题首先需要知道:String本身是Java中的一个类,系统已经给我们定义好了。
为了解决字符串比较的问题,Java设计人员在String类中为我们定义了一个equals方法,使用这个方法比较字符串,系统就会比较字符串数据本身,而不是字符串的储存地址。
查资料的过程中还了解到一点关于字符串的拓展知识,这里也记录一下:
字符串池:由于字符串在程序中十分常用,为了节省内存,重复利用相同字符串,专门为字符串开辟的一块储存空间。字符串池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。一般对象不存在这个字符串池中,并且创建的对象仅仅存在于方法的堆栈区。也就是说要看创建方式:
1.凡是直接用引号进行赋值的,默认就在字符串池中;而且如果字符串池中已有相同的字符串,则字符串池中的内容不会再增加。
2.凡是用new关键字创建的字符串,默认不在字符串池中。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 我天!xx.equals(null) 是什么骚操作?? 2020-06-01
- equals 和 hashCode 到底有什么联系? 2020-05-25
- Java 重写equals的时候为什么一定要重写hashcode-一个例子 2020-04-16
- 听说你还搞不定java中的==和equals? 2020-04-08
- 【转载】hashCode()和equals() 2020-03-12
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash