java中什么算obj_Java中“==”运算符和equals(Object obj)方法的区别

== 运算符

== 既可以用于基本数据类型的比较,也可以用于引用数据类型的比较

(1)如果比较的是基本数据类型变量:比较两个变量的值是否相等,相等即为true

注意:当基本数据类型进行比较时,符号两边的数据必须类型兼容(类型相同或可自动类型转换),否则编译出错。

测试代码:

public class EqualsTest {

public static void main(String[] args) {

//基本数据类型

int i = 10;

int j = 10;

float f = 10.0f;

System.out.println(i == j);//true

System.out.println(i == f);//true

char c = 10;

System.out.println(i == c);//true

char c1 = 'A';

char c2 = 65;

System.out.println(c1 == c2);//true

/*

boolean b = true;

System.out.println(b == i);//类型不兼容,不能进行自动类型转换,编译不通过,不能进行比较

*/

}

}

(2))如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体

注意:当引用数据类型进行比较时,符号两边的数据类型必须兼容(类型相同或有父子类关系),否则编译不通过。

代码示例:

class Person {

private String name;

private int age;

public Person() {

}

public Person(String name, int age) {

this.name = name;

this.age = age;

}

}

public class EqualsTest {

public static void main(String[] args) {

//引用数据类型比较

Person p1 = new Person("Tom", 18);

Person p2 = new Person("Tom", 18);

System.out.println(p1 == p2);//false

String str1 = new String("Java");

String str2 = new String("Java");

System.out.println(str1 == str2);//false

/*

Person p = new Person();

String str = "hello";

System.out.println(p == str);//Person和String类型无父子类关系,类型不兼容,不能进行比较

*/

}

}

equals(Object obj) 方法

equals(Object obj)方法只能用于引用数据类型比较,最初是在Object类中定义的:

public boolean equals(Object obj) {

return (this == obj);

}

Object类中定义的equals方法和 == 的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。如果一个类型没有重写equals方法,那么调用equals等价于 ==。

像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的是两个对象的类型和"实体内容"是否相同,而不考虑引用的是否是同一个对象。

class Person {

private String name;

private int age;

public Person() {

}

public Person(String name, int age) {

this.name = name;

this.age = age;

}

}

public class EqualsTest {

public static void main(String[] args) {

//引用数据类型比较

Person p1 = new Person("Tom", 18);

Person p2 = new Person("Tom", 18);

System.out.println(p1.equals(p2));//false,Person类没有重写equals方法,比较的是对象的地址

String str1 = new String("Java");

String str2 = new String("Java");

System.out.println(str1.equals(str2));//true,String类重写了equals方法,比较内容

Date date1 = new Date(4512574565L);

Date date2 = new Date(4512574565L);

System.out.println(date1.equals(date2));//true,Date类重写了equals方法,比较内容

}

}

自定义类中要根据有没有重写Object类的equals方法来判断;通常情况下,重写equals方法会比较类中的相应属性值是否都相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值