转! java 中“==” 与“ .equals ”比较
在java程序设计中,经常需要比较两个变量值是否相等。例如
1、简单数据类型比较
a = 10;
b = 10;
if(a == b){
//写要执行的代码
}
2、引用数据类型比较
ClassA a = new ClassA("abc");
ClassB b = new ClassB("abc");
if(a == b){
//写要执行的代码
}
显然在例1中 a == b的值为true,例2中a == b值为false
你应该有一些java基础吧,下面我用int类型和它的封装类Integer来说明简单类型和封装类型进行比较时的区别:
==和equals()的用法
先看一段代码:
public class TestEqual{
public static void main(String [ ] args){
//简单类型比较
int a = 100;
int b = 100;
System.out.println("a == b?" + (a == b));
//引用类型比较
Integer c = new Integer(100);
Integer d = new Integer(100);
System.out.println("c == d?" + (c == d));
}
}
运行该程序,会打印出以下信息:
a == b? true
c == b? false
可以看出,在引用类型比较中,虽然用了同一个参数“100”来构造两个变量,但他们仍然不同。
why??
要知道,对于这两个引用类型变量c和d,他们指向的是两个不同的对象(只不过两个对象的值都是100),因为是指向两个对象,所以比较这两个变量会得到false的值。
注意啦,重要结论:
对于引用类型变量,运算符“==”比较的是两个变量是否引用同一对象。
*************************************************************************************************************
那么如何比较对象的值是否相等呢?
在java中提供了equals()方法用于比较对象的值。我们把上面引用类型部分的程序稍作修改:
Integer c = new Interger(100);
Integer d = new Interger(100);
System.out.println("c equals d?" + (c.equals(d) ));
运行后可得一个true,这是因为,方法equals()进行的是“深层比较”,他会去比较两个对象的值是否相等。
如果你想多学一点,一定会问:“这个可爱的equals()方法是由谁来实现的呢?”
我们知道,java中所有类的父类是Object类,在Object中,已经定义了一个equals()方法,但是这个默认的equals()方法实际上也只是测试两个变量引用是否指向同一对象(即与那个可爱的 == 功能一样)。所以它并不一定能得到你所期望的效果。所以我们还经常需要自己将定义的类(就是上面的TestEqual)中的equals()进行覆盖。像Integer封装类就已经覆盖了Object中的equals()方法,直接可以拿来比较引用类型c和d指向的对象的值。
好了,相信你一定耐心地看到了这里,我们来总结一下
== 和equals()两种比较方法,在使用时要注意:
1、如果测试两个简单类型的数值是否相等,则一定要用“==”来比较;
2、如果要比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较;
3、如果需要比较两个引用变量是否指向同一对象,则使用“==”来进行比较;
还有,对于自定义的类,应该根据情况覆盖其父类或Object类中的equals()方法,否则默认的equals()方法功能与“==”相同。
转! java 中“==” 与“ .equals ”比较的更多相关文章
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- Java中的equals和hashCode方法
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例 原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...
- java集合(3)- Java中的equals和hashCode方法详解
参考:http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object ...
- 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别
Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...
- Java中的equals和hashCode方法详解
Java中的equals和hashCode方法详解 转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...
- 关于Java中的equals方法
关于Java中的equals方法 欢迎转载,但是请填写本人的博客园原址https://www.cnblogs.com/JNovice/p/9347099.html 一.什么是equals方法 equa ...
- 沉淀再出发:java中的equals()辨析
沉淀再出发:java中的equals()辨析 一.前言 关于java中的equals,我们可能非常奇怪,在Object中定义了这个函数,其他的很多类中都重载了它,导致了我们对于辨析其中的内涵有了混淆, ...
- 转:Java中的equals和hashCode方法详解
转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...
随机推荐
- 为Apache配置虚拟机Virtual Host
配置虚拟机最少需要修改两个文件,即httpd-vhosts.conf 和 hosts (记住修改任何配置前先备份哦,这才是个好习惯) 第一步,修改httpd-vhosts.conf文件, 文件路径 \ ...
- 批发网加盟页面轮播Jquery jcarousellite插件效果
Jquery jcarousellite 插件的好处 其中: 参数说明: btnPrev string 上一个按钮的class名, 比如 btnPrev: ".prev" ...
- php基础复习(3)文件上传于下载
一. 客户端配置: 表单页面 表单的发送方式是post 添加enctype = “multipart/form-data” <form action="doaction.php&q ...
- android source
h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font ...
- ubuntu 安装 Tomcat
首先确认系统中没有安装openJDK,有的话先卸载,安装oracle jdk 下载jdk Linux x64 172.95 MB jdk-8u101-linux-x64.tar.gz ...
- Web自定义协议,BS端启动CS端,
实例 1.准备CS项目,windows窗体应用程序,拖进来一个label控件来接受BS的参数,并显示,右击生成,复制该文件的bin目录下的exe,例如放在以下路径,例如C:\\simu\\下, 2.编 ...
- 【leetcode❤python】 58. Length of Last Word
#-*- coding: UTF-8 -*-#利用strip函数去掉字符串去除空格(其实是去除两边[左边和右边]空格)#利用split分离字符串成列表class Solution(object): ...
- Android-图片按钮汇总
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- left join 等连接查询遇到同名字段覆盖问题
可以在查询时给字段赋别名,但是需要注意以下:*的位置要在最前面,放在其他地方都会出错.这种写法同名覆盖的字段还在,然后在*的后面加上别名字段,已经可以满足所有需求了 SELECT *,r.id as ...
- Django忘记管理员账号和密码的解决办法
看着Django的教程学习搭建网站,结果忘记第一次创建的账号和密码了.结果搭建成功以后,一直无法登陆到管理页面,进行不下去了. 如图所示: 在网上找了很多的方法都不行,最后使用新建一个superuse ...