equals与== 经常用于比较,用法如下:字符串比较相同用equals,普通数值(基本数据类型)比较用==, contentEquals下面讲

理论准备:

java的基本类型如int.float,double等,执行int a = 5,时,在内存中直接存储的是5这个数字,而使用new关键字创建

一个对象时比如String str = "123",内存中先储存的是一个引用变量str,他存储的是一个指向"123"这个对象的内存地址

1. == 比较的是什么?

== 比较的是数值本身,所以使用==比较基本类型

对于非基本类型, == 比较的是他们的内存地址是否相同(即是否指向同一个对象)

接下来看这段代码

第一个为true的原因是因为字符串的缓冲池,创建s1的引用对象"123"时,将其放入了缓冲池中,所以当我们String s2="123";时

是把s2这个引用指向了缓冲吃中的"123".所以s1与s2的内存地址相同,上面说了 == 对于非基本类型比较的是内存地址所以

输出结果是true

而第二个false是因为new关键字是创建新的对象,在内存的堆中创建了两个String对象,其值都是"123",s1,s2分别指向这两个对象

所以s1与s2储存的内存地址依旧不同,此外由于上面已经在缓冲池中有了"123"这个对象,所以new String("123")只是在堆中创建对象

不会把这个对象添加到缓冲池中

第三个false,s1指向缓冲池中的"123",s2是在堆中又新创建了一个值为"123"的对象,二者内存地址当然不同,所以是false

小结:可以看到只要使用new关键字创建字符串,就一定会在堆中创建一个新的对象,并检测缓冲池中是否有该对象,无则添加

而直接赋值的方式创建字符串是把该对象(如果缓冲池中没有)添加到字符串缓冲池中.有则从缓冲池中返回该对象的引用

2.equals

默认的equals方法效果和==相同,有Object中的equals源码为证

而一些类重写了该方法,比如String中的equals方法,使用String的equals方法时要注意,它比较的是字符串

说明:这里的value指的字符数组,是他们拼接成的字符串,可以看到987行比较时是对字符数组的每一个值进行比较,也就是说String的equals比较的是

字符串的内容是否相同,这与==作用于非基本类型时比较内存地址是不同的

3.contentEquals 与equals

contentEqualsn方法比较的是任何实现了CharSequence接口的对象,而equals源码里有一行代码(上图已标注,978行),

所以equals方法比较的是字符串,只有要比较的对象是字符串并且内容相同时才会返回true

contentEquals的源码就不贴了,感觉这个方法用的不太多,有兴趣可以自己研究

over.

java equals == contentEquals的更多相关文章

  1. 总结Java equals()和hashCode()的联系

    Java equals()和hashCode()的联系 如果两个对象是相等的,那么它们必须有相同的哈希码. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等. 如果两个对象是不同的类的实例 他们 ...

  2. java equals和==的区别

    大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...

  3. java equals 和 "==" 比较

    java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(== ...

  4. Java equals 和 hashcode 方法

    问题 面试时经常会问起字符串比较相关的问题, 总结一下,大体是如下几个: 1.字符串比较时用的什么方法,内部实现如何? 2.hashcode的作用,以及重写equal方法,为什么要重写hashcode ...

  5. Java equals的一个坑

    public class StringEqualsObject { public static void main(String[] args) { String name="Tom&quo ...

  6. java equals和==区别及string类的说明

    一.equals和==的区别 1.1.equals之string字符串的比较 1.1.1.源码如下图 if (this == anObject) {            return true;  ...

  7. java :equals()和hashcode()方法的结合使用

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  8. java equals()方法

    java基础学习总结--equals方法 一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 public class Te ...

  9. java equals 和 == 的区别

    )1. == 可以用来比较基本类型以及引用类型.在基本类型中 == 比较的是两个变量的值是否相等.在引用类型中,== 比较的是两个对象的内存地址是否相等. )2. equals 只能用来比较引用类型. ...

随机推荐

  1. 多域名环境,页面获取url的一种方案

    因为系统是分布式部署的.而且有多个域名,所以常常涉及到获取url的问题. 这是系统框架层面须要提供的能力.否则每一个模块都须要自己去想办法获取ip,就会非常混乱.上线也easy发生bug 主要须要解决 ...

  2. Hibernate常见问题 No row with the given identifier exists问题的解决办法及解决

    (1)在学习Hibernate的时候遇到了这个问题"No row with the given identifier exists"在网上一搜看到非常多人也遇到过这个问题! 问题的 ...

  3. jquery通过数值改变球大小

    在业务中遇到一个问题:在页面上显示一个球.且球的大小会应数字的大小而改变. 我们都知道 js是能够画圆(用css样式准备一个圆.假设addClass),但这并非我们想要的. 于是笔者脑洞打开:用样式画 ...

  4. 有限等距性质RIP

    参考博客:http://blog.csdn.net/jbb0523/article/details/44565647 压缩感知测量矩阵之有限等距性质(Restricted Isometry Prope ...

  5. Uva 01124, POJ 3062 Celebrity jeopardy

    It's hard to construct a problem that's so easy that everyone will get it, yet still difficult enoug ...

  6. cron任务解释

    cron本来是在linux下的一个定时任务执行工具,现在很多语言都支持cron,本文参考https://en.wikipedia.org/wiki/Cron,解释一下cron配置. 概述 cron配置 ...

  7. Hibernate学习---Configuration,Session,SessionFactory

    上一节我们讲到了Hibernate的测试,并且给出了测试代码,刚开始看见这个测试代码的同学估计是一头雾水把,所以这一节我们来讲一下测试代码. 本节主要内容: Configuration Session ...

  8. canvas 从初级到XX 2# 让我们在之前的基础之上,再迈进一步吧 [中级向] (上)

    还是老样子,先啰嗦一点前言. 最近各种事务缠身,所以也就隔了比较长的时间才开始码这篇文.希望不会这么快就过气. 好了,接下来就开始码代码.(写到中途,突然感觉到的.本篇设计大量初中物理知识,请怀念的往 ...

  9. php项目报错 Warning: session_start(): open(D:/software/wamp/wamp/tmp\sess_msrjot7f32ciqb1p2hr4ahejg4, O_RDWR) f

    今天一个php项目报错: Warning: session_start(): open(D:/software/wamp/wamp/tmp\sess_msrjot7f32ciqb1p2hr4ahejg ...

  10. JVM类加载机制以及类缓存问题的处理

    一:JVM类加载机制 和 类缓存问题的处理 当一个java项目启动的时候,JVM会找到main方法,根据对象之间的调用来对class文件和所引用的jar包中的class文件进行加载(其步骤分为加载.验 ...