java中的 equals 与 ==
Java中的"=="永远比较的是两个对象是否是同一个对象(引用指向同一块内存就是同一个对象)
Java中equals() 在使用必须与类挂上钩,不能单独使用。有的人这样理解"==比较的是对象,而equals()方法比较的是内容(即对象里面的属性)"。
其实,Java中的equals作为一个方法,我们不能脱离了类来单独讨论它:
equals()方法是来自于Object类的,源码如下:
public boolean equals(Object obj)
{
return this == obj;
}
Object类中的equals方法与==功能是一模一样的:比较两个对象是否是同一个对象。
只是,作为Object子类的String类为了符合自身的特质,重写了Object类的equals方法,重写后的效果是:如果两个String对象的值相同,那么调用equals方法返回true,否则返回false。
看如下演示代码:
public class Test{ public static void main(String[] args){
String str1 = "hello";
String str2 = new String("hello");
String str3 = new String("hello");
String str4 = str3;//与str3是同一个对象 System.out.println(str1 == str2);//false,不是同一个对象
System.out.println(str2 == str3);//false,不是同一个对象
System.out.println(str3 == str4);//true,是同一个对象
System.out.println(str1.equals(str2));//true,值(属性)相同
System.out.println(str2.equals(str3));//true,值(属性)相同 A a1 = new A();
A a2 = new A();
System.out.println(a1 == a2);//false,不是同一个对象
System.out.println(a1.equals(a2));//false 因为没有重写equals()方法,所以直接调用Object的equals方法(等同于==),所以错误(因为不是同一对象)
}
} class A{}
Java中,所有基本数据类型的实现类都按照String类的方式重写了equals方法,这些类都符合”==比较对象,equals比较值“这一结论。
如果一个类是你自己定义的,那么如果你不重写equals方法,它还是默认比较对象。(直接调用Object类中的方法)
参考链接:http://jingyan.baidu.com/article/f96699bbc9d6ae894e3c1b81.html
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中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...
随机推荐
- react antd 动态表单
import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import { Form, InputNumb ...
- New Concept English three (44)
25w/m 32errors People travelling long distances frequently have to decide whether they would prefer ...
- 深入理解java虚拟机-第六章
第6章 类文件 6.3 Class类文件的结构 Class文件是一组以8位字节为基础单位的二进制流. Class文件格式采用一种类似C语言结构伪结构存储数据,这种伪结构中只有两种数据类型:无符号数和表 ...
- Python [Leetcode 374]Guess Number Higher or Lower
题目描述: We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have t ...
- keycloak && docker安装 &&spring boot 集成使用
1. 基础依赖 a. docker mysql b. dokcer keycloak-mysql 2. 安装 mysql (注意实际使用最好使用本地数据卷) docker run --na ...
- FastAdmin 2018-05-26 更新时更新了 SQL 文件 关于 ROW_FORMAT=DYNAMIC 改为 ROW_FORMAT=COMPACT 问题
FastAdmin 2018-05-26 更新时更新了 SQL 文件 关于 ROW_FORMAT=DYNAMIC 改为 ROW_FORMAT=COMPACT 问题 观查到 FastAdmin 在 20 ...
- JavaWeb中验证码的实现
在Web程序中,验证码是经常使用的技术之一.Web程序永远面临未知用户和未知程序的探测.为了防止恶意脚本的执行,验证码技术无疑是首选方案之一.本文将讨论如何在JSP和Servlet中使用验证码技术. ...
- composer的安装和使用 学习日志
如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...
- mongo数据排序和分页显示
数据排序 使用sort()1 升序-1 降序自然排序 数据插入的顺序$natural db.stu.drop(); db.stu.insert({,,"address":" ...
- shell编程中用户输入处理(shell 04)
shell编程中用户输入处理1.命令行参数2.脚本运行时获取输入 命令行参数 通过空格来进行分割的位置参数 :$+position $0,$1,$2 ....$0 :程序名$1,$2,$3 ... $ ...