zoukankan      html  css  js  c++  java
  • Java面试题:==运算符与equals方法的区别

    据说这个面试题目,80%的程序员都会理直气壮的回答错误!!

    一: ==运算符

    1. 如果比较的是基本数据类型,则直接比较数值是否相等,返回值为“true or false”
    2. 如果比较的是引用数据类型,则直接比较地址值是否相等,返回值为“true or false”

    二: Object类中的equals()方法:

    1. Object类中的equals方法比较的是引用数据类型,比较的的是地址值是否相等,“返回true or false”
    2. 如果子类有重写了equals方法,例如String类型,则直接比较类中的属性,返回"true or false"

    三:==运算符运用举例:

    public class Comparea {
    	public static void main(String[] args) {
    		int i1=10;
    		int j1=10;
    		System.out.println(i1==j1);//==运算符的比较使用
    		int i=10;
    		char a=10;
    		System.out.println(i==a);//char类型已经转换成了相应的ASCII码值,所以输出true
    		A1 a1=new A1(2,"男");
    		A1 a12=new A1(2,"男");
    	   System.out.println(a1==a12);//==比较的是地址值,与根父类Object一样
    	
    	}
    }
    class A1{
    	 private int age;
    	 private String  name;
    	A1(int age,String name){
    		this.age=age;
    		this.name=name;
    	}
    	
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    true
    true
    false
    
    • 1
    • 2
    • 3

    四:子类重写Object类中的equals()方法运用举例

    public class Comparea {
    	public static void main(String[] args) {
    		A1 a1=new A1(2,"男");
    		A1 a12=new A1(2,"男");
    		System.out.println(a1==a12);//==比较的是地址值,与根父类Object一样
    		System.out.println(a1.equals(a12));//此时的equals方法子类已经重写了,只比较类中的属性
    		
    	}
    }
    class A1{
    	 private int age;
    	 private String  name;
    	A1(int age,String name){
    		this.age=age;
    		this.name=name;
    	}
    	
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public boolean equals(Object obj) {//向上转型,把子类的对象赋给父类的引用,通过父类的引用调用,子类重写了的父类中的方法
    		if(this==obj) {//this关键字就是表示当前类的对象
    			return true;
    		}
    		if(obj instanceof A1) {//obj instanceof A:关键字的作用就是判断 
    			//obj 是否是A1这个类的对象,或者其子类的对象
    			
    			A1 a1=(A1)obj;//再通过向下转型,去调用A1类中的方法
    			return this.age==a1.age&&this.name.equals(a1.name);
    		}return false;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    false
    true
    原文章:https://blog.csdn.net/weixin_46351306/article/details/112059830
  • 相关阅读:
    2019-3-13-win10-uwp-使用-ScaleTransform-放大某个元素
    2019-8-31-dotnet-控制台-Hangfire-后台定时任务
    2019-8-31-dotnet-控制台-Hangfire-后台定时任务
    2018-8-10-WPF-编译为-AnyCPU-和-x86-有什么区别
    2018-8-10-WPF-编译为-AnyCPU-和-x86-有什么区别
    2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
    2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
    2019-9-23-dotnet-判断特定进程存在方法
    android解析xml (pull)
    字符串转换成float和double类型
  • 原文地址:https://www.cnblogs.com/tfil/p/14228288.html
Copyright © 2011-2022 走看看