equals()和==的区别
这个问题,总是记不住,那我就动手多写几遍,加强自己的记忆。
先给结论:
1)==。主要作用于基本数据类型的变量,比较的是二者的 “值”是否相等;如果作用于两个对象之间,则比较的是对象的地址是否相同。
2)对于equals方法。注意:equals方法不能作用于基本数据类型的变量,如果你创建的对象没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
下面我就来详细的解释。
==,就多说了,基本类型比较就用==,对象比较记得用equlas()方法。
equlas()方法是怎么比较的呢,最好的办法就是去看源码,
Object类的equlas()
public boolean equals(Object obj) {
return (this == obj);
}
从equlas可以看出,用的是==比较,也就是比较两个对象的地址是否一致。如果我们创建对象没有改写equals()方法的话,则你创建的对象继承Object类的equlas()方法,比较的就是对象的地址。但是如果你相比较某个类的两个对象是否相等,那你就可以改写equlas方法。比如String类。
String类的equlas()源码:
public boolean equals(Object anObject) {
//先比较引用对象的地址,地址一样,肯定是同一个对象
if (this == anObject) {
return true;
}
//如果地址不一样,那就比较看内容是不是一样的
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
//逐个比较两个字符串字符是不是一样的,这也是为什么String的
euqlas()方法比较的是内容。
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
既然说到这了,那就顺便整理下String这类的重点:
问题:
1.为什么说String对象是不可变?
其实,你传入的字符串在String对象里都是以字符数组保存的,而且字符数组是以final修饰的。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
2.String a = “abc”和String b = new String(“abc”)区别?
当你new创建String对象的时候,其实是创建两个对象,一个是在堆上的,一个是在常量池里的。而a指向的就是常量池了的对象,b指向的是堆上的对象。
String a = new String("abc");
String b = new String("abc");
String c = "abc";
String d = "abc";
System.out.println(a==b)//fasle堆上的两个对象
System.out.println(a.euqals(b))//true String的equals()比较的是值
System.out.println(c==d)//true 他们都是指向常量池里的那个唯一对象
System.out.println(c.euqals(d))//true 同一个对象,肯定的。
equals()和==的区别的更多相关文章
- java equals和==的区别
大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...
- equals与==的区别
equals与==的区别. 下面是equals的源码 public boolean equals(Object anObject) { if (this == anObject) { //如果两个对象 ...
- equals和==的区别 你真的掌握了吗?
PS:最近读Java编程思想的时候发现了一些小问题.就是equals方法和==,感觉自己是真正掌握了,其实并没有.简单的记录一下. 学习内容: 1.equals 和 == 的区别 equals和== ...
- 【ASP.net】Equals 和 == 的区别
在比较Equals 和 ==的区别前.我们先来了解下相关的知识 C#数据类型 1.值类型 值类型有: 值类型包括:简单类型.结构类型.枚举类型:引用类型包括:Object 类型.类类型.接口.代表元. ...
- 【java】由equals和==的区别引出的常量池知识
equals和==的区别,百度查到的结果大都是:equals比较的是值,==比较的是引用地址. String str1 = "abc"; String str2 = "a ...
- 比较compareTo与equals及==的区别
1.compareTo: 附上:源码: public int compareTo(String anotherString) { int len1 = value.length; ...
- Java笔记——equals和==的区别
摔在这里几次,还是记下来吧. 原文:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html -------------- ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- equals()和hashCode()区别?
equals()和hashCode()区别? ------------------------------------------------- equals():反映的是对象或变量具体的值,即两个对 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
随机推荐
- Linux 如何显示一个文件的某几行
1. 从第1000行开始,显示2000行.即显示1000~2999行 cat input_file | tail -n +1000 | head -n 2000 2. 显示 1000行到3000行 c ...
- 【SqlServer系列】集合运算
1 概述 已发布[SqlServer系列]文章如下: [SqlServer系列]SQLSERVER安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 [SqlS ...
- HDOJ-2006求奇数的乘积
Problem Description 给你n个整数,求他们中所有奇数的乘积. Input 输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数 ...
- 【ztree】ztree例子
<script language="javascript" type="text/javascript" src="js/jquery.js&q ...
- [BZOJ 1500]维修数列 [Splay Tree从进阶到住院]
历尽艰辛终于A掉了这题QwQ 贴COGS评论区几句话=.= 策爷:"splay/块状链表的自虐题.".深刻理解到如果没有M倾向就不要去写这题了.. -Chenyao2333 记得b ...
- 面向对象设计——抽象工厂(Abstract Factory)模式
定义 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类.抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么.这样一来,客户就能从具体的产 ...
- teamviewer试用期到期解决
1.命令行输入:%appdata%删除teamviewer文件夹2.命令行输入:regedit删除teamviewer文件夹3.卸载tv4.控制面板->设备管理器->网络适配器->f ...
- 关于SQL语句条件值写中文查不到的问题
在使用jdbc链接MySQL执行SQL语句的时候,sql语句中的where条件,参数值带中文,则查询不到结果,而where条件,参数值都为数字或字母时可以正常查询, 原因是mysql的characte ...
- Android -- 从源码的角度一步步打造自己的TextView
1,自定义控件一直是我们的痛点,今天就和大家一点点去了解了解,首先一般的自定义控件都是继承于View类,所以我们先来看看view的一些重要的方法,这是官方文档,大家想了解更多也可以去看看,这里我展示对 ...
- HTML 笔记 基础1
html 笔记 20170807 晴 <h1>标题</h1> 标题分为6个 从1到6字体逐渐变小 <p>段落</p> <html> < ...