java基础 --- java中的equals和==

简介: java基础 --- java中的equals和==

1. equals()用法

Java中所有的类都是继承自Object这个基类的,在Object类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址,但在一些类库中已经重写了这个方法(一般都是用来比较对象的成员变量值是否相等),比喻:String,Integer,Data等类中,所以它们不再是比较类在堆中的地址了。

Object类中源码:

1. public boolean equals(Object var1) {
2. return this == var1;
3. }

String类中重写equals的代码:

1. public boolean equals(Object var1) {
2. if (this == var1) {
3. return true;
4.   } else {
5. if (var1 instanceof String) {
6. String var2 = (String)var1;
7.     int var3 = this.value.length;
8. if (var3 == var2.value.length) {
9.      char[] var4 = this.value;
10.      char[] var5 = var2.value;
11. 
12. for(int var6 = 0; var3-- != 0; ++var6) {
13. if (var4[var6] != var5[var6]) {
14. return false;
15.       }
16.      }
17. 
18. return true;
19.     }
20.    }
21. 
22. return false;
23.   }
24.  }

String类对equals方法重写,用来比较指向的字符串对象所存储的字符串是否相等。

来个示例体验一下:

1. String a = "abc";// abc在常量池中
2. String b = "abc";//栈中b指向常量池中的abc
3. String c = new String("abc");// 在堆内存中重新开辟了一个abc的空间
4. String d = c.intern();//检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。
5. 
6. 
7. System.out.println(a==b);           //true
8. System.out.println(a.equals(b));    //ture
9. System.out.println(a==c);           //false
10. System.out.println(a.equals(c));    //true
11. System.out.println(a==d);           //true
12. System.out.println(a.equals(d));    //true

2. == 的用法

"关系操作符生成的是一个boolean结果, 它们计算的是操作数的值之间的关系"。                ---《Java编程思想》

java中的数据类型可以分为两类,一类是基本数据类型【byte/short/char/int/long/float/double/boolean】,一类是引用数据类型【接口/类/数组等非基本数据类型】

  1. ==作用于基本数据类型的变量,则直接比较其存储的“值”是否相等
  2. ==作用于引用类型的变量,则比较的是所指向的对象的地址

来个示例体验一下:

1. public class Main {
2. 
3. /**
4.      * @param args
5.      */
6.     public static void main(String[] args) {
7. // TODO Auto-generated method stub
8. 
9.         int n=3;
10.         int m=3;
11. 
12.         System.out.println(n==m);            //true
13. 
14. String str = new String("hello");
15. String str1 = new String("hello");
16. String str2 = new String("hello");
17. 
18.         System.out.println(str1==str2);    //false
19. 
20.         str1 = str;
21.         str2 = str;
22.         System.out.println(str1==str2);    //true
23.     }
24. 
25. }

参考链接:

https://www.jb51.net/article/150691.htm

https://www.cnblogs.com/dolphin0520/p/3592500.html

 

相关文章
|
2月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
59 2
|
10天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
存储 Java C++
java中“==”和equals,究竟比的是什么
java中“==”和equals,究竟比的是什么
36 3
java中“==”和equals,究竟比的是什么
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
405 37
|
1月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
19 1
|
1月前
|
Oracle Java 关系型数据库
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
缓存 安全 Java
【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)
Java的特点和优点,、Java 8的新特性、面向对象、基本数据类型和引用类型、自动拆装箱与自动装箱、==与equals()的区别、为什么重写equals()就要重写hashcode()、抽象类和接口的区别、重载和重写的区别、四种引用方式、wt()和sleep()的区别、java方法是值传递还是引用传递?访问修饰符、static、final、this和super、volatile的用法及原理
【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)
|
3月前
|
Java
【Java基础面试二十三】、==和equals()有什么区别?
这篇文章区分了Java中的`==`运算符和`equals()`方法:`==`用于基本数据类型时比较值是否相等,用于引用类型时比较内存地址是否相同;而`equals()`默认实现按内存地址比较,但通常被重写以根据对象内容比较是否相等。
【Java基础面试二十三】、==和equals()有什么区别?
|
3月前
|
Java
【Java基础面试二十一】、说一说hashCode()和equals()的关系
这篇文章讨论了Java中`hashCode()`和`equals()`方法之间的关系,强调如果两个对象相等,它们必须有相同的哈希码,但有相同哈希码的对象未必相等,并解释了这一关系在HashSet集合中判断元素是否重复的应用场景。
【Java基础面试二十一】、说一说hashCode()和equals()的关系