Java中的equals和==的差别 以及Java中等价性和同一性的讨论
==对基本数据类型比较的是值,对引用类型比较的是地址
equals()比较的是对象的数据的引用
等价性原理:
- 自反性 x.equals(x)为true
- 对称性 x.equals(y) 为true时,y.equals(x) 也为true
- 传递性 若x.equals(y) 为true , y.equals(z) 为true, 则x.equals(z) 为true
- 一致性 在未修改x,y的值的情况下x.equals(y)始终是相同的值
- 非空性 x.equals(null) 总是 false
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=3;
int m=3;
String str1 = "hello";//"hello"存在于常量池,str1,str2都指向该常量池
String str2 = "hello";
System.out.println("基本数据类型的 == 判定:"+(n==m)); //判断数据
System.out.println("引用数据类型的 == 判定"+(str1==str2));//判断地址
String str3 = new String("hello");//"hello"存在于堆的对象内存区,非常量区
String str4 = new String("hello");
System.out.println("对象的 == 判定:"+(str3 == str4)); //判断地址
System.out.println("对象的 equals() 判定"+str3.equals(str4));//判断数据
str4 = str3;
System.out.println("对象赋值后的 == 判定"+( str3 == str4 ) );
System.out.println("对象的 equals() 判定"+str3.equals(str4));
}
}
结果如下:
基本数据类型的 == 判定:true
引用数据类型的 == 判定true
对象的 == 判定:false
对象的 equals() 判定true
对象赋值后的 == 判定true
对象的 equals() 判定true
public class practice5 {
public static void main(String[] args) {
Dog spot = new Dog();
Dog scruffy = new Dog();
Dog spot1 = new Dog();
Dog spot2 = new Dog();
spot.setNameString("spot");
scruffy.setNameString("scruffy");
spot.setSayString("Ruff!");
scruffy.setSayString("Wurf!");
spot2.setNameString("spot");
spot2.setSayString("Ruff!");
spot1=spot;
System.out.println(spot.getNameString()+"\t"+spot.getSayString());
System.out.println(scruffy.getNameString()+"\t"+scruffy.getSayString());
System.out.println("spot1==spot\t"+(spot1==spot));
System.out.println("spot1.equals(spot)\t"+spot1.equals(spot));
System.out.println("spot2==spot\t"+(spot2==spot));
System.out.println("spot2.equals(spot)\t"+spot2.equals(spot));
System.out.println("spot2.nameString==spot.nameString\t"+(spot2.nameString==spot.nameString));
System.out.println("spot2.nameString.equals(spot.nameString)\t"+spot2.nameString.equals(spot.nameString));
}
}
class Dog{
String nameString;
String sayString;
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public String getSayString() {
return sayString;
}
public void setSayString(String sayString) {
this.sayString = sayString;
}
}
结果
spot Ruff!
scruffy Wurf!
spot1==spot true
spot1.equals(spot) true
spot2==spot false
spot2.equals(spot) false
spot2.nameString==spot.nameString true
spot2.nameString.equals(spot.nameString) true
Java中的equals和==的差别 以及Java中等价性和同一性的讨论的更多相关文章
- String类型中 "=="和"equals"比较的差别
String类型中 "=="和"equals"比较的差别 先说明一下String类型的变量的创建方式 在创建新的String类型的变量时,首先会在缓冲区查找是否 ...
- 沉淀再出发:java中的equals()辨析
沉淀再出发:java中的equals()辨析 一.前言 关于java中的equals,我们可能非常奇怪,在Object中定义了这个函数,其他的很多类中都重载了它,导致了我们对于辨析其中的内涵有了混淆, ...
- java中的 equals 与 ==
Java中的"=="永远比较的是两个对象是否是同一个对象(引用指向同一块内存就是同一个对象) Java中equals() 在使用必须与类挂上钩,不能单独使用.有的人这样理解&quo ...
- Java里的equals总结
前段时间一直在工作中使用Java,由于有一些C++功底,于是简单看了一下Java相关的语法便开始编写代码,结果在创建一个自定义类,并将自定义类放入ArrayList中,之后查找ArrayList是否有 ...
- Java中String推断相等equals与==的差别以及StringBuilder的equals
Java中String类型具有一个equals的方法能够用于推断两种字符串是否相等,可是这样的相等又与运算符==所推断的"相等"有所不同,接下来进行分析,结论由程序进行验证 Str ...
- 关于Java中的equals方法
关于Java中的equals方法 欢迎转载,但是请填写本人的博客园原址https://www.cnblogs.com/JNovice/p/9347099.html 一.什么是equals方法 equa ...
- 【转】彻底弄懂Java中的equals()方法以及与"=="的区别
彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...
- (转)浅谈Java中的equals和==
原文地址: http://www.cnblogs.com/dolphin0520/p/3592500.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new S ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
随机推荐
- [html]自定义滚动条风格
webkit: <style type="text/css"> *{ margin: 0; padding: 0; } ::-webkit-scrollbar { wi ...
- 学习笔记50—多重假设检验与Bonferroni校正、FDR校正
总结起来就三句话: (1)当同一个数据集有n次(n>=2)假设检验时,要做多重假设检验校正 (2)对于Bonferroni校正,是将p-value的cutoff除以n做校正,这样差异基因筛选的p ...
- 学习笔记18—circos应用集
一.在线画图(行列分别最大为75) 相信大家都听说过circos图,但是亲自画过的人可能就很少,这主要因为软件的安装和使用稍微有一点麻烦.其实,circos图也是可以在线绘制的,这样就简单多了!一起来 ...
- 浅谈Java简单实现的生产者与消费者问题
一.面对生产者和消费者的问题,首先我们得明白几点: 生产者:生产数据:消费者:消费数据.消费者在没有数据可供消费的情况下,不能消费:生产者在原数据没有被消费掉的情况下,不能生产新数据.假设,数据空间只 ...
- 大数据新手之路二:安装Flume
Ubuntu16.04+Flume1.8.0 1.下载apache-flume-1.8.0-bin.tar.gz http://flume.apache.org/download.html 2.解压到 ...
- Python全栈开发-有趣的小程序
进度条的打印 import sys,time for i in range(20): sys.stdout.write('$') #stdout是标准输出的意思,在一般电脑上,stdout的 ...
- 以太坊 web3.js 文档翻译及说明
这些天,为了录制以太坊DAPP开发实战课程,我准备把web3文档全部翻译一下(并做适当的补充),目前web3.js 0.20.x 版本 已经翻译完成,欢迎大家前往查阅. 这里还几个实用DEMO,供大家 ...
- Confluence 6 权限概述
下面的权限可以指派给任何一个空间: 分类 权限 全部(All) 查看(View )给你能够查看空间内容的权限,包括有空间目录和其他的内容,例如主面板. 删除自己(Delete own) 给你权限删除你 ...
- Bulb Switcher (leetcode java)
问题描述: There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off ...
- 廖雪峰网站:学习python函数—调用函数(一)
# 调用函数 # 可以直接从Python的官方网站查看文档: # http://docs.python.org/3/library/functions.html#abs n = abs(100) # ...