小编给大家分享一下java==运算符和=()方法的区别有哪些,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用=方法。
<强> 1。==运算符强>
对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就会返回真的,然而如果是两个引用类型的变量,则分为两种情况:1)它们指向同一个对象,结果返回正确;2)它们指向不同的对象,即使对象内容相同,结果还是返回假;下面程序示范了使用==运算符比较两个变量是否相等的结果:
public class Test { ,public static  void main (String [], args), { int 才能;a =, 5; int 才能;b =, 5; String 才能;s1 =,“helloJava"; String 才能;s2 =,“helloJava"; String 才能;s3 =,“hello" +“Java"; String 才能;s4 =,“hello"; String 才能;s5 =,“Java"; String 才能;s6 =, s4 +, s5; String 才能;s7 =, new 字符串(“helloJava"); System.out.println才能(“==b ?:,“+ (a==b)); System.out.println才能(“s1==s2:,“+ (s1==s2)); System.out.println才能(“==s1 ?:“+ (s1==s3)); System.out.println才能(“s1==s6 ?:,“+==s6) (s1); System.out.println才能(“s1==s7 ?:,“+==s7) (s1); System.out.println才能(“s1.equals (s6) ?:,“+ (s1.equals (s6))); System.out.println才能(“s1.equals (s7) ?:,“+ (s1.equals (s7))); ,} }
运行结果为:
==b吗?:真正的s1==s2
引用>
?:真
==s1吗?:真
s1==s6吗?:假
s1==s7 ?:假
s1.equals (s6) ?:真
s1.equals (s7) ?:真正的结果分析:两个int类型的a和b相等,不需要多解释,s1, s2和s3所引用的字符串在编译期间就已经确定下来,因此它们都将引用常量池中的同一个字符串对象,s6对应的字符串值不能在编译期间确定下来,s7使用新构造器将会创建一个新字符串的对象,s7引用堆内存中创建的字符串对象,不在常量池中。(关于字符串字符串的创建和存储机制将在下篇介绍,望大家置顶公众号,第一时间收看)。
<强> 2。equals()方法强>
=()方法是对象类提供的一个方法,直接使用这个方法判断两个对象相等的标准与使用==运算符没有区别,但是怎么样实现类似于“值相等”的判断规则呢?答案是重写=方法。
字符串已经重写了对象的equals()方法,字符串的equals()方法判断两个字符串相等的标准是:如果两个字符串所包含的字符序列相等,通过=()方法比较将返回真,否则返回错误的。
一般而言,重写=()方法应该满足下列条件:
1)自反性:对任意x, x.e quals (x)一定返回真的。
2)对称性:对任意x, y,如果x.e quals (y)返回真,则y.equals (x)也一定返回真的。
3)传递性:对任意x, y, z,如果x.e quals (y)返回真,y.equals (z)也返回真,则x.e quals (z)也一定返回真的。
4)一致性:对任意x, y,如果对象中用于比较的信息没有改变,那么无论调用多少次x.e quals (y),返回的结果应该保持一致,要么一直返回真,要么一直返回假。
5)对任意不是空的x, x.e quals (null)一定返回假。
实际应用中常常需要根据业务本身重写=()方法,等于()方法的实现也是由业务决定的,下面示范了一种符合实际情况的重写=()方法的示例:
public class Person { ,private String 名称;//姓名 ,private int 年龄;//年龄 ,private String  idNum;//身份证号 , ,public 人(),{ 超级才能(); ,} , ,public 人(姓名、String int 年龄,String idNum), { 超级才能(); this.name 才能=,名称; 时间=this.age 才能;年龄; 时间=this.idNum 才能;idNum; ,} ,//重写=方法 ,public boolean =(Object obj) {//才能如果两个对象是同一个对象,返回现实 如果才能(却;能够==,obj) { ,,return 真实; ,,}//obj才能是人对象 如果才能(obj !=null ,,, obj.getClass ()==Person.class) { ,,Person p =,(人)obj; ,,//并且身份证号相同才判断两个对象相等 ,,如果(this.idNum.equals (p.getIdNum ())) { ,,,return 真实; ,,} ,,} return 才能;假; ,} ,public String  getName (), { return 才能,名字; ,} ,public void  setName (String 名称),{ this.name 才能=,名称; ,} ,public int  getAge (), { return 才能;年龄; ,} ,public void  setAge (int 年龄),{ 时间=this.age 才能;年龄; ,} ,public String  getIdNum (), { return 才能;idNum; ,} ,public void  setIdNum (String idNum), { 时间=this.idNum 才能;idNum; ,} ,public static  void main (String [], args), { Person 才能;p1 =, new 人(“张三,,,14日,“zs14abc"); Person 才能;p2 =, new 人(“张三2“,,15日,“zs14abc"); Person 才能;p3 =, new 人(“张三,,,14日,“zs14abc2"); System.out.println才能(“p1.equals (p2) ?:,“+ (p1.equals (p2))); System.out.println才能(“p1.equals (p3) ?:,“+ (p1.equals (p3))); ,} }java==运算符和equals()方法的区别有哪些