==对基本数据类型比较的是值,对引用类型比较的是地址

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中等价性和同一性的讨论的更多相关文章

  1. String类型中 "=="和"equals"比较的差别

    String类型中 "=="和"equals"比较的差别 先说明一下String类型的变量的创建方式 在创建新的String类型的变量时,首先会在缓冲区查找是否 ...

  2. 沉淀再出发:java中的equals()辨析

    沉淀再出发:java中的equals()辨析 一.前言 关于java中的equals,我们可能非常奇怪,在Object中定义了这个函数,其他的很多类中都重载了它,导致了我们对于辨析其中的内涵有了混淆, ...

  3. java中的 equals 与 ==

    Java中的"=="永远比较的是两个对象是否是同一个对象(引用指向同一块内存就是同一个对象) Java中equals() 在使用必须与类挂上钩,不能单独使用.有的人这样理解&quo ...

  4. Java里的equals总结

    前段时间一直在工作中使用Java,由于有一些C++功底,于是简单看了一下Java相关的语法便开始编写代码,结果在创建一个自定义类,并将自定义类放入ArrayList中,之后查找ArrayList是否有 ...

  5. Java中String推断相等equals与==的差别以及StringBuilder的equals

    Java中String类型具有一个equals的方法能够用于推断两种字符串是否相等,可是这样的相等又与运算符==所推断的"相等"有所不同,接下来进行分析,结论由程序进行验证 Str ...

  6. 关于Java中的equals方法

    关于Java中的equals方法 欢迎转载,但是请填写本人的博客园原址https://www.cnblogs.com/JNovice/p/9347099.html 一.什么是equals方法 equa ...

  7. 【转】彻底弄懂Java中的equals()方法以及与"=="的区别

    彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...

  8. (转)浅谈Java中的equals和==

    原文地址: http://www.cnblogs.com/dolphin0520/p/3592500.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new S ...

  9. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

随机推荐

  1. Golang简单日志类

    实现简单的日志写入文件功能运行环境:golang1.4.2+win7x64golang1.4.2+centos6.5×64 package Helper import ( “fmt” “log” “o ...

  2. 牛客国庆集训派对Day3 G Stones

    Stones 思路: sg函数打表找规律 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #in ...

  3. 通过AndroidSDK自带的Tool在dos命令行窗口显示日志,并存入txt文档中

    1.在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集.  如果一个文本文件是utf-8的,那么在dos窗口中不能正确显示文件中的内容. 以下命令切换编码: ch ...

  4. python中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)

    该部分的三个属性都是高级方法,平时用的地方不是很多 一.静态方法 静态方法的使用不是很多,可以理解的就看一下,用的地方不是很多 class Dog(object): def __init__(self ...

  5. (转)c# 断言类

    Assert 类 使用 true/false 命题验证单元测试中的条件. 继承层次结构 System.Object Microsoft.VisualStudio.TestTools.UnitTesti ...

  6. [JSP] Action Tags

    1.: forward转发请求to another resource (可能是jsp, html,等). 语法: <jsp:forward page="relativeURL | &l ...

  7. 单细胞数据高级分析之消除细胞周期因素 | Removal of cell cycle effect

    The normalization method described above aims to reduce the effect of technical factors in scRNA-seq ...

  8. 第十二周(MySort)

    注意:研究sort的其他功能,要能改的动代码,需要答辩 模拟实现Linux下Sort -t : -k 2的功能. 要有伪代码,产品代码,测试代码(注意测试用例的设计) 参考 Sort的实现.提交博客链 ...

  9. 错误不能中断(不许因错误或异常而产生阻断性Bug)

    错误不能终断(不许因错误或异常而产生阻断性Bug),当遇到错误或异常时,要处理掉,并且给予合理提示(比如:XXX失败,请重试)

  10. Spring Boot之logback日志最佳实践

    一.Spring Boot日志介绍 Spring Boot对所有内部日志记录使用了Commons Logging,但是底层日志实现是开放的.为Java Util日志记录.Log4J2和Logback提 ...