Java初学者:深度辨析"=="与equals的区别
Java初学者:深度辨析"=="与equals()方法的区别
1.基本数据类型当中,"=="比较的是两个变量的值
int a=5;
int b=4;
3 int c=5;
4 System.out.println(a==b);//false
5 System.out.println(a==c);//true
2.引用数据类型当中,"=="比较的是两个对象在内存里是不是同一个对象,就是说在内存里的存储位置(地址,引用)是否一致。(这里拿String举例)
String str1 = new String("Hello");
String str2 = new String("Hello");
String str3 = new String("World");
System.out.println(str1 == str2);// false,new出来的对象在堆当中,属于两个对象
System.out.println(str1 == str3);// false,同上
3.两个String对象的存储值是一样的,但有可能在内存里存储在不同的地方。
String str1="Hello";
String str2="Hello";
String str3 = new String("Hello");
4 //对String对象进行==比较
System.out.println(str1==str2);//true,str1和str2在方法区的常量池当中,属于同一个引用
System.out.println(str1==str3);//false,str3在堆当中,与str1存储位置不一致
System.out.println(str2==str3);//false,同上
4."=="比较的是引用(内存里的存储位置),而String类中equals()方法比较的是字符串的内容。
String str1="Hello";
String str2="Hello";
String str3="World";
String str4 = new String("Hello");
String str5 = new String("World"); System.out.println(str1.equals(str2));//true,内容相同
System.out.println(str1.equals(str3));//false,内容不同
System.out.println(str1.equals(str4));//true,内容相同
System.out.println(str1.equals(str5));//false,内容不同
5.public boolean equals(Object obj)这个方法是由Object对象提供的,可以由子类进行重写。
默认的实现只有当对象和自身进行比较时才会返回true,这个时候和"=="是等价的。下面是Object类下的equals()方法:
public boolean equals(Object obj) {
return (this == obj);
}
而String类继承至Object类,对equals()方法进行了方法重写,下面是String类下的equals方法():
public boolean equals(Object anObject) {
if (this == anObject) {
return true;//同一个引用,说明是同一对象,字符序列内容一定相同
}
if (anObject instanceof String) {//判断是不是String对象
String anotherString = (String) anObject;//下转型,转换为String字符串
int n = value.length;
if (n == anotherString.value.length) {//判断长度是否相同
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])//判断字符内容
return false;
i++;
}
return true;
}
}
return false;
}
另外,String,BitSet,Date,和File都对equals方法进行了重写,对两个String对象而言,值相等意味着它们包含同样的字符序列,对于基本类型的包装类来说;值相等意味着对应的基本类型的值一样。
7.总结:
(1)."=="如果比较的是对象是基本数据类型,则比较的是值是否相等;"=="如果比较的对象是引用数据类型,则比较的是引用,即比较在内存当中的存储位置(地址)是否相同,也可以理解为是否是同一个对象(a is a)。
(2).equals()方法默认比较的是是否为同一对象(子类没有重写父类equals方法),String类的equals()方法比较的是内容(该类对equals()方法进行了重写,即a like a)是否相同,自定义类也可重写equals()方法,这里不在赘述。
Java初学者:深度辨析"=="与equals的区别的更多相关文章
- Java中“==”、“compareTo()”和“equals()”的区别
在比较两个对象或者数据大小的时候,经常会用到==.compareTo()和equals(),尤其是在接入了Comparable接口后重写compareTo方法等场景,所以我们来理一下这三个的区别. 1 ...
- java中String的==和equals的区别
首先看代码1: public static void main(String[] args) { List<String> list=new ArrayList<String> ...
- java细节篇(==和equals的区别)
1)当==两边是对象时(String,Integer...),两边比的都是地址2)当==两边是基本类型时(int,float),两边比的都是值3)默认equals比的是对象的地址,但是重写的话可以改变 ...
- java中的==和equals的区别
关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...
- Java中==与equals的区别及理解
区别: "==" 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致. 如果两个对象的引用相同时(指向同一对象时)," ...
- Java基础系列之你真的懂==与equals的区别吗?
对于Java初学者而言,可能会对这两个比较方法比较模糊,有的人可能会觉得两个的方法使用起来结果是一样的等.如果你有这样的想法,我建议你来看看这边博客,让你充分了解这两个比较的异同,以及他们底层是如何比 ...
- Java学习笔记——双等号和equals的区别
一.==和equals的区别 1. ==可以用来比较基本类型和引用类型,判断内容和内存地址 2. equals只能用来比较引用类型,它只判断内容.该函数存在于老祖宗类 java.lang.Object ...
- Java 基本数据类型 及 == 与 equals 方法的区别
Java数据类型分为基本数据类型与引用数据类型. 1 基本数据类型 byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0 short:短整型,2个字 ...
- Java 中 == 和 equals 的区别
有一段时间,== 和 equals 的区别一直困扰着我.因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解. == 和 equals 最大的区 ...
随机推荐
- ecshop中smarty比较操作符(eq,ne,neq)含义
eq相等, ne.neq不相等, gt大于, lt小于, gte.ge大于等于, lte.le 小于等于, not非, mod求模. is [not] div by是否能被某数整除, is [not ...
- Django开发的基于markdown的博客开源
PiperMarkdown Blog for Django1.11,Python 3.6,based on Markdown,网址,希望大家能给个star,谢谢! 什么是PiperMarkdown 这 ...
- 如何使用SVN?
一.什么是SVN? SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁 ...
- 使用cxf做webservice接口调用
一.服务端 建javaweb工程,去官网下载所需的cxf接口发布的jar包,导入到工程.官网地址:http://cxf.apache.org/download.html 1.建立调用接口 packag ...
- Java之面向对象例子(三) 多态,重写,重载,equals()方法和toString()方法的重写
重写(继承关系) 子类得成员方法和父类的成员方法,方法名,参数类型,参数个数完全相同,这就是子类的方法重写了父类的方法. 重载 在一个类里有两个方法,方法名是完全一样的,参数类型或参数个数不同. 例子 ...
- 关于SQL经典题
最近刚刚练过的一道sql分享给大家, 先上题目: -- 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, -- 部门编号 DNAME VARCHAR(14) ...
- 动态语言的灵活性是把双刃剑 -- 以Python语言为例
本文有些零碎,总题来说,包括两个问题:(1)可变对象(最常见的是list dict)被意外修改的问题,(2)对参数(parameter)的检查问题.这两个问题,本质都是因为动态语言(动态类型语言)的特 ...
- 【转载】java InputStream读取数据问题
原文链接:http://www.cnblogs.com/MyFavorite/archive/2010/10/19/1855758.html 1. 关于InputStream.read() 在 ...
- spring+springmvc+mybaties整合实例
spring+springmvc+mybaties即SSM框架整合在ecpliseee中开发:很么多西都是只有只有自己上手做,才会懂.昨晚熬了很久,才弄出来.也希望对新手有帮助!下面整理一下思路:关键 ...
- bootstrap-table 怎么自定义搜索按钮实现点击按钮进行查询
bootstrap-table自带搜索框感觉有点丑,我们可以把搜索功能单独拉出来放到页面的某一个位置. 首先我们看一下官方演示: 如果你感觉集成的检索框不太好看,而且我们也不想让搜索框和列表放到一块去 ...