java的equals与==的区别
看了网上关于equal与==的区别,感觉很多有些片面,不仔细,这里我来说说我对equal与==的理解
首先要了解基本类型与引用类型
1.int,char,boolean之类的就是基本类型,我们只要使用==即可判断是否相等,无法使用equals
2.引用类型分为两类,第一类是重写过hashcode()和equals()方法的类,比如String,Integer,等,这些类使用==比较的是内存地址,即不同引用是否指向同一个对象,是,则true。equals比较则是直接比较对象的内容,不是判断不同引用是否指向同一个对象,只要对象里的各种参数完全一致,就为·true
3.第二类引用类型,就是没有重写过hashcode()和equals()方法的类,我们看Object类下的equals()方法
public boolean equals(Object obj) {
return (this == obj);
我们知道所有类都是Object类的子类,就是说如果子类不重写equals()方法,那么该类使用equals()方法就是使用Object下的equals,就是不同引用是否指向同一个对象,是,则true。如果我们希望实现普通类只比较对象的属性,可以对hashcode()和equals()进行重写,下面就是
class Student {
private String type;
private String name;
private int age;
Student(String type,String name,int age){
this.age=age;
this.type=type;
this.name=name;
}
@Override
public int hashCode() {
int B=31; // 31 131 1313 13131 131313 etc..
int hash=0;
hash=hash*B+age;
hash=hash*B+type.toUpperCase().hashCode();
hash=hash*B+name.toUpperCase().hashCode();
return hash;
}
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj==null){
return false;
}
Student student=(Student) obj;
return student.hashCode()==this.hashCode();
}
}
java的equals与==的区别的更多相关文章
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
- Java笔记——equals和==的区别
摔在这里几次,还是记下来吧. 原文:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html -------------- ...
- java笔记---equals和==的区别
摔在这里几次,还是记下来吧.原文:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html --------------- ...
- Java 中 Equals和==的区别(转)
另外一篇参考: https://blog.csdn.net/striverli/article/details/52997927 在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的 ...
- Java中equals和==的区别?为什么重写equals方法后,一定要重写hashCode方法?
首先明确一点,equals是方法,==是操作符. 1. 如果比较的是基本数据类型: 只讨论==,因为equals是不存在的,因为java中基本数据类型不能调用method的. 2. 如果比较的是引用类 ...
- java中equals和==的区别详解
java中的数据类型,可分为两类: 1.基本数据类型. byte,short,char,int,long,float,double,boolean这八大原始数据类型他们之间的比较,使用“==”,比较的 ...
- 关于java中equals与==的区别的小实验
java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...
- java中.equals和==的区别?
Java中的equals是十分重要的,和= =要区别开来,孙卫琴的JAVA面向对象编程一书对这个做了阐述,现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习 1.声明格式 ...
- (转)Java中equals和==的区别
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号( ...
随机推荐
- eclipes中配置javadoc文档
- 获取浏览器的ip以及省份
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> <script type=& ...
- android4.4系统解决“ERRORcouldn't find native method”方法
android4.4系统解决"ERRORcouldn't find native method"方法 今天笔者在移植一个tv模块从android4.2到android4.4系统的设 ...
- STL algorithm算法lexicographical_compare(30)
lexicographical_compare原型: std::lexicographical_compare default (1) template <class InputIterator ...
- NS2网络模拟(3)-吞吐率
1: #NS2_有线部分\Throughput.awk 2: 3: BEGIN { 4: #Initialize the variable 5: init = 0; 6: i = 0; 7: } 8: ...
- mysql/Java服务端对emoji的支持 专题
关于utf8不支持emoji是因为emoji是用4个字节存储的字符,而mysql的utf8只能存储1-3个字节的字符.那就存不了呗 需要更改的地方:(1)Mysql服务器client,mysql,my ...
- .net core使用redis
本地启动redis控制台 && 安装redis服务(用于调试) 1.下载最新版redis,选择.zip则是免安装的版本下载地址:https://github.com/Microsoft ...
- mysql 视图,存储过程,游标,触发器,用户管理简单应用
mysql视图——是一个虚拟的表,只包含使用时动态查询的数据 优点:重用sql语句,简化复杂的SQL操作,保护数据,可以给用户看到表的部分字段而不是全部,更改数据格式和表现形式 规则: 名称唯一,必须 ...
- QT如何编译出带调试信息的qtwebkit库
因为在编译QT的时候默认是不编译成带调试信息的qtwebkit库的,不论如何设置参数都是没有用的.后面在一博客中查找到相关信息 1.编译带debug 信息的webkit 库 注释或者删除qt-ev ...
- glibc内存管理方式
程序员接触的内存空间和系统接触的物理内存空间是有所区别的.对于一般进程来讲,他面对的是一个线性虚拟内存空间:地址从0到最大值.每一个进程面对的虚拟内存空间都是一样的,都享有全部的内存地址.虚拟内存空间 ...