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. Emoji表情符号录入MySQL数据库报错的解决方式

    前言:手机app应用评论的时候,恢复表情符号.提示失败.​1,查看tomcat后台日志,核心报错信息例如以下:  Caused by: java.sql.SQLException: Incorrect ...

  2. hdu2993之斜率dp+二分查找

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. jQuery 插件 Magnify 开发简介(仿 Windows 照片查看器)

    前言 因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽.调整大小.最大化, ...

  4. 以KeyValue形式构建Lua Table

    Key为字符串 -- 定义一个key,value形式的table local kv = {fruit = "apple", bread = "french", ...

  5. 二.java下使用RabbitMQ实现hello world

    上一篇文章介绍了windows环境下的安装和配置rabbitMQ,具体戳这边,一.windows环境下rabbit的的安装和配置. 现在我们可以着手编写hello world程序了,一窥RabbitM ...

  6. Python爬虫(二十三)_selenium案例:动态模拟页面点击

    本篇主要介绍使用selenium模拟点击下一页,更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import unittest from selenium impor ...

  7. python decorator 基础

    一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者类).首先来看一个简单的例子: # -*- coding: utf-8 -*- def log_cost_tim ...

  8. spring boot自定义starter

    1.spring boot 项目中自定义jar包 2.项目目录 3.src/main/java 下面写自己的方法,重点是 resources 下面的文件,在resources下面新建文件夹名字为 ME ...

  9. python作用域与命名空间

    什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就 ...

  10. 晒下我在2017年所阅读的JavaScript书单

    前言 学习是一个持续不断的过程,在互联网技术里畅游的程序猿们,对学习的渴望更是难以穷尽.2017即将逝去,2018已经漏出曙光,回顾这一年,在学习的路上收获还是颇丰的,下面就晒一晒2017年我所学习的 ...