java equals == contentEquals
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的更多相关文章
- 总结Java equals()和hashCode()的联系
Java equals()和hashCode()的联系 如果两个对象是相等的,那么它们必须有相同的哈希码. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等. 如果两个对象是不同的类的实例 他们 ...
- java equals和==的区别
大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...
- java equals 和 "==" 比较
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(== ...
- Java equals 和 hashcode 方法
问题 面试时经常会问起字符串比较相关的问题, 总结一下,大体是如下几个: 1.字符串比较时用的什么方法,内部实现如何? 2.hashcode的作用,以及重写equal方法,为什么要重写hashcode ...
- Java equals的一个坑
public class StringEqualsObject { public static void main(String[] args) { String name="Tom&quo ...
- java equals和==区别及string类的说明
一.equals和==的区别 1.1.equals之string字符串的比较 1.1.1.源码如下图 if (this == anObject) { return true; ...
- java :equals()和hashcode()方法的结合使用
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- java equals()方法
java基础学习总结--equals方法 一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 public class Te ...
- java equals 和 == 的区别
)1. == 可以用来比较基本类型以及引用类型.在基本类型中 == 比较的是两个变量的值是否相等.在引用类型中,== 比较的是两个对象的内存地址是否相等. )2. equals 只能用来比较引用类型. ...
随机推荐
- Emoji表情符号录入MySQL数据库报错的解决方式
前言:手机app应用评论的时候,恢复表情符号.提示失败.1,查看tomcat后台日志,核心报错信息例如以下: Caused by: java.sql.SQLException: Incorrect ...
- hdu2993之斜率dp+二分查找
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- jQuery 插件 Magnify 开发简介(仿 Windows 照片查看器)
前言 因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽.调整大小.最大化, ...
- 以KeyValue形式构建Lua Table
Key为字符串 -- 定义一个key,value形式的table local kv = {fruit = "apple", bread = "french", ...
- 二.java下使用RabbitMQ实现hello world
上一篇文章介绍了windows环境下的安装和配置rabbitMQ,具体戳这边,一.windows环境下rabbit的的安装和配置. 现在我们可以着手编写hello world程序了,一窥RabbitM ...
- Python爬虫(二十三)_selenium案例:动态模拟页面点击
本篇主要介绍使用selenium模拟点击下一页,更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import unittest from selenium impor ...
- python decorator 基础
一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者类).首先来看一个简单的例子: # -*- coding: utf-8 -*- def log_cost_tim ...
- spring boot自定义starter
1.spring boot 项目中自定义jar包 2.项目目录 3.src/main/java 下面写自己的方法,重点是 resources 下面的文件,在resources下面新建文件夹名字为 ME ...
- python作用域与命名空间
什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就 ...
- 晒下我在2017年所阅读的JavaScript书单
前言 学习是一个持续不断的过程,在互联网技术里畅游的程序猿们,对学习的渴望更是难以穷尽.2017即将逝去,2018已经漏出曙光,回顾这一年,在学习的路上收获还是颇丰的,下面就晒一晒2017年我所学习的 ...