`
yangnier
  • 浏览: 8400 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

比较双等号(==)与equals的区别详解

阅读更多
  最近刚学习了Java中语法的==与equals的区别,就好好的整理清楚;

  
  在刚刚开始学习Java语言的时候,遇到==和equals,总觉得它们两个差不多; ==用来比较两个数据是否相等;equals用来比较两个对象是否“相等”。

双等号(==):是关系运算符,用来比较两个数据是否相等(关系运算符的运算结果一定是一个Boolean值; 比较的是变量所带的内存地址是否一样。
    public class Student {

	private int shuzi;

	public Student(int age) {
		this.shuzi = shuzi;
	}

	public boolean equals(Object obj) {
		if(this==obj){
			return true;
		}
		if(obj instanceof Student){
			Student st = (Student)obj;
			return this.shuzi==st.shuzi;
		}
		return false;

	}

}

   双等号比较两个数据是否相等
  public class Demo {

	public static void main(String[] args) {

		// 以下三种方式都是在内存中保存一个数值100

		int a1 = 100;
		int a2 = 100;

		Integer a3 = 100;
		Integer a4 = 100;

		Integer a5 = new Integer(100);
		Integer a6 = new Integer(100);

		System.out.println(a1 == a2);  //true
		System.out.println(a3 == a4);  //true
		System.out.println(a1 == a3);  //true

		System.out.println(a5 == a6);  //false
		System.out.println(a1 == a5);  //true
		System.out.println(a3 == a5);  //frue
	}

}

    Object类
    1.Object类是Java中类的层次结构的根类
    2.Java中所有的类都是继承于是Object这个基类的子类
    3.数组类型也是Object的子类
 
  equals :用来比较两个对象是否“相等”,equals是Object类中提供的一个方法,这个方法的初始行为是比较对象的内存地址,但是在一些类库存里这个方法是被重写了的;如String,Integer。在这些类中,equals有它本身的实现,不再是比较在对内存中存放的地址。
    对复合数据类型之间进行equals的比较,在没有重写的其方法的情况下,它们之间比较的还是内存中的存放位置的地址值,这样就跟==的结果是一样的;如果重写了,那就会按照重写的方法来实现。
   Object中equals的方法
public class dome {
	

		public static void main(String[] args) {



		String s1 = "ABC";
		String s2 = "ABC";

		String s3 = new String("ABC");
		String s4 = new String("ABC");

		
		System.out.println(s1.equals(s2));//ture
		System.out.println(s3.equals(s4));//ture
		System.out.println(s1.equals(s3));//ture

	}

}
这里用到了基本类型和对应的类类型在进行运算的时候,类类型的数据会自动的拆箱[拆包]
拆箱:将对象中的数据自动转换成基本类型
装箱:将基本类型的数据包装成引用类型
分享到:
评论

相关推荐

    javaEE面试题

    - **双等号(==)与equals()的区别**: - `==`用于比较两个对象的引用是否指向同一个内存地址,即比较的是对象的身份。 - `equals()`方法用于比较两个对象的内容是否相等,即比较的是对象的状态。默认情况下,...

    Java面试指南_JAVA.pdf

    - **等号“==”与equals()方法的区别**:解释了基本数据类型和引用数据类型在比较时的不同。 - **接口与抽象类的区别**:比较了接口和抽象类在Java中的实现和用法。 - **异常分类**:阐述了运行时异常与一般异常的...

    2021-2022计算机二级等级考试试题及答案No.12871.docx

    9. Java 中,两个 String 对象的比较应该使用 equals 方法,因此 str1.equals(str2) 的值为 true。 10. ASP.NET 应用程序中,访问 SqlServer 数据库时,需要导入 System.Data.SqlClient 命名空间。 11. 日期型常量...

    C#编码规约

    - **Clone()**:实现克隆功能时,注意深拷贝与浅拷贝的区别。 - **默认构造器**:每个类都应至少有一个构造器,即使它没有显式声明。 - **抽象类中的抽象方法**:抽象类中可以包含抽象方法,用于强制派生类实现特定...

    第大数据微服务架构+区块链第12单元 练习手册试题及答案.docx

    【知识点详解】 1. 对象方法的理解: - `getClass()`方法:这是一个非静态方法,用于获取对象的运行时类型,即实际的类信息,而不是声明时的类型。 - `clone()`方法:是一个受保护的方法,用于创建当前对象的一个...

    ISO Latin-1字符集

    ### ISO Latin-1字符集详解 #### 知识点概览 ISO Latin-1字符集,亦称为ISO/IEC 8859-1,是计算机编码标准中的一种,主要用于西欧语言的字符表示。它由ISO(国际标准化组织)和IEC(国际电工委员会)联合制定,是...

    【05-面向对象(下)】

    接口与抽象类的区别 •接口里只能包含抽象方法,不同包含已经提供实现的方法;抽象类则完全可以包含普通方法。 •接口里不能定义静态方法;抽象类里可以定义静态方法。 •接口里只能定义静态常量属性,不...

    Android键盘键名和键值列表.pdf

    - **KEYCODE_EQUALS(等号键)** - **KEYCODE_AT(@键)** - **KEYCODE_POUND(#键)** - **KEYCODE_APOSTROPHE(单引号键)** - **KEYCODE_BACKSLASH(反斜杠键)** - **KEYCODE_COMMA(逗号键)** - **KEYCODE_...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.3.5 小心使用浮点数进行比较 53 3.3.6 boolean和char 55 3.3.7 不要使用还没有创建出来的变量 57 3.3.8 String——char串起的项链 58 3.3.9 转义符——看不见写得出 61 3.4 小结:基本数据类型—— Java中...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.3.5 小心使用浮点数进行比较 53 3.3.6 boolean和char 55 3.3.7 不要使用还没有创建出来的变量 57 3.3.8 String——char串起的项链 58 3.3.9 转义符——看不见写得出 61 3.4 小结:基本数据类型—— Java中...

Global site tag (gtag.js) - Google Analytics