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

 

目录
相关文章
|
21天前
|
IDE Oracle Java
java基础教程(1)-Java概述和相关名词解释
【4月更文挑战第1天】Java是1995年Sun Microsystems发布的高级编程语言,以其跨平台特性著名。它介于编译型和解释型语言之间,通过JVM实现“一次编写,到处运行”。Java有SE、EE和ME三个版本,分别针对标准、企业及嵌入式应用。JVM是Java虚拟机,确保代码在不同平台无需重编译。JRE是运行环境,而JDK包含开发工具。要安装Java开发环境,可从Oracle官网下载JDK,设置JAVA_HOME环境变量并添加到PATH。
|
2月前
|
存储 Java
java基础,java基本数据类型、引用数据类型
java基础,java基本数据类型、引用数据类型
|
4月前
|
Oracle Java 关系型数据库
最新Java基础系列课程--Day01-Java基础入门(一)
最新Java基础系列课程--Day01-Java基础入门
最新Java基础系列课程--Day01-Java基础入门(一)
|
5天前
|
Java 编译器 API
Java基础教程(17)-Java8中的lambda表达式和Stream、Optional
【4月更文挑战第17天】Lambda表达式是Java 8引入的函数式编程特性,允许函数作为参数或返回值。它有简洁的语法:`(parameters) -> expression 或 (parameters) ->{ statements; }`。FunctionalInterface注解用于标记单方法接口,可以用Lambda替换。
|
6天前
|
Java
[Java 基础] Java修饰符
[Java 基础] Java修饰符
|
14天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
16天前
|
Java 索引
Java基础教程(6)-Java中的流程控制语句
【4月更文挑战第6天】Java流程控制包括选择(if, switch)、重复(while, do-while, for)和跳转(break, continue, return)语句。选择语句根据条件执行不同路径,if和switch用于单条件和多条件分支。重复语句用于循环,如for循环的初始化、条件和迭代部分,以及while和do-while循环。跳转语句中,break用于立即退出循环,continue结束当前循环迭代,return则从方法中返回。此外,Java的for each循环简化了数组或集合的遍历,但不能控制遍历顺序或索引。
|
18天前
|
存储 Java 编译器
Java基础教程(4)-Java中的操作符
【4月更文挑战第4天】Java中的String是常用类,字符串是不可变对象,用双引号表示。String对象在编译期长度受限于65535,运行期不超过Int范围。字符串方法如length()、substring()、replace()、equals()等提供了多种操作。可变字符串可使用StringBuffer或StringBuilder。String对象通过字符串池优化内存,池中已有相同内容字符串则返回其引用。
|
2月前
|
Java
java equals和==
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法 public boolean equals(0bjectobj):参数可以是任何对象,只有参数是一个字符串并且内 容相同的才会给true;否则返回false 注意事项: 1.任何对象都能用object进行接收。 2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。 3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。 推荐:"abc".equals(str) 不推荐:str.equals("abc") public boolean egualsIgnoreCas
10 1
|
2月前
|
Java 编译器 C++
【Java从入门到精通】Java基础语法(2)
【Java从入门到精通】Java基础语法(2)
18 0