当前位置:首页 > 开发 > 编程语言 > Java > 正文

Java关于==和equals

发表于: 2015-05-22   作者:chenbowen00   来源:转载   浏览:
摘要: 关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况: 1、 String a = "aaa"; a=="aaa"; ==> true 2、 new String("aaa")==new String("aaa
关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况:
1、
String a = "aaa"; 
a=="aaa";

==> true
2、
new String("aaa")==new String("aaa");

==> false
那么String a = new String("aaa"),是否a.toString()=="aaa"是否应该返回为true呢?当前答案是返回false。为什么了,其实第一印象中a.toString()返回的是字符串"aaa",

程序在运行的时候会创建一个字符串缓冲池当使用 a= "aaa" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,a的"aaa"先被放到了池中,后续和"aaa"比较时使用的是相同的内存地址,第二个程序中,new代表重新使用新的内存地址,因此比较后不一致。

根据Java的字符串理解,想当然的认为a.toString()返回的是从字符串缓冲池中获取的,因此字符串引用的内存地址应该是一致,所以后续导致理解有误判断认为应该返回为true。

这里字符串对象a内部的值"aaa"引用的地址和后面常量字符串是不一致的,因此返回为false。
如果想要上述表达式为true则需要进行如下处理
String a = new String("aaa");
a.intern()=="aaa";

intern方法检查字符串池里是否存在"aaa"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"aaa"添加到字符串池中,然后再返回它的引用。

Java关于==和equals

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型,其余的都是
在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型,其余的都是
先来看能表明hashcode和equals的关系的几句话: equals()相等的两个对象,hashcode()一定相等; equ
在Java日常编程中经常使用==或者equals来比较两个变量,那么这两种方式有什么区别呢。 堆栈:首先我
浅谈Java中的equals和==   在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin
浅谈Java中的equals和==   在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin
Q1.下面的代码片段的输出是什么? Object s1 = new String("Hello"); Object s2 = new String("Hell
基本数据类型 对于基本数据类型,也称原始数据类型(byte、short、int、long、float、double、boole
我们经常会遇到比较两个值或对象是否相等,那么你用了equals还是==呢,你是否清楚二者的区别呢?下
//仅作为学习笔记 /* Object : 是所有对象的直接或者间接父类 该类中定义的肯定是所有对象都具备的
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号