西宁高端网站建设,桂林做网站公司,整形网站开发,怎么让百度收录网址与equals()的区别
对于
比较的是值是否相等如果作用于基本数据类型的变量#xff0c;则直接比较其存储的 “值”是否相等#xff1b;如果作用于引用类型的变量#xff0c;则比较的是所指向的对象的地址
对于equals方法
equals方法不能作用于基本数据类型的变量#xff…与equals()的区别
对于
比较的是值是否相等如果作用于基本数据类型的变量则直接比较其存储的 “值”是否相等如果作用于引用类型的变量则比较的是所指向的对象的地址
对于equals方法
equals方法不能作用于基本数据类型的变量equals继承Object类比较的是是否是同一个对象如果没有对equals方法进行重写则比较的是引用类型的变量所指向的对象的地址默认也是对于String、Date等类对equals方法进行了重写的话比较的是所指向的对象的内容。具体要看自定义类比如实体类等里有没有重写Object的equals方法来判断通常情况下重写equals方法会比较类中的相应属性是否都相等
重写equals()方法的原则 对称性 如果x.equals(y)返回是“ true ” 那么y.equals(x) 也应该返回是 “true”。 自反性x.equals(x)必须返回是“true”。 传递性如果x.equals(y)返回是“true”而且y.equals(z)返回是“true” 那么z.equals(x)也应该返回是“true”。 一致性如果x.equals(y)返回是“true”只要x和y内容一直不变不管你 重复x.equals(y)多少次返回都是“true”。 任何情况下x.equals(null)永远返回是“false”x.equals(和x不同类型的对象)永远返回是“false”。
的特点及使用 基本类型比较值:只要两个变量的值相等即为true。引用类型比较引用(是否指向同一个对象)只有指向同一个对象时 才返回true。用“ ”进行比较时符号两边的数据类型必须兼容(可自动转换的基本 数据类型除外)否则编译出错
/* * 的使用* 运算符* 1. 可以使用在基本数据类型变量和引用数据类型变量中* 2. 如果比较的是基本数据类型变量比较两个变量保存的数据是否相等。不一定类型要相同* 如果比较的是引用数据类型变量比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体* 补充 符号使用时必须保证符号左右两边的变量类型一致。*/
public class EqualsTest {public static void main(String[] args) {//基本数据类型int i 10;int j 10;double d 10.0;System.out.println(i j);//trueSystem.out.println(i d);//trueboolean b true;
// System.out.println(i b);char c 10;System.out.println(i c);//truechar c1 A;char c2 65;System.out.println(c1 c2);//true}
}equals()的特点和使用
equals()
所有类都继承了Object也就获得了equals()方法。还可以重写。只能比较引用类型其作用与“”相同,比较是否指向同一个对象。 格式:obj1.equals(obj2)特例当用equals() 方法进行比较时 对类File 、String 、Date 及包装类Wrapper Class来说是比较类型及内容而不考虑引用的是否是同一个对 象原因在这些类中重写了Object类的equals()方法。当自定义使用equals()时可以重写。用于比较两个对象的“内容”是否都 相等
package com.atguigu.java1;
import java.util.Date;
/* * 二、equals()方法的使用* 1. 是一个方法而非运算符* 2. 只能适用于引用数据类型* 3. Object类中equals()的定义* public boolean equals(Object obj) {return (this obj);}* 说明Object类中定义的equals()和的作用是相同的比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体* * 4. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后比较的不是* 两个引用的地址是否相同而是比较两个对象的实体内容是否相同。* * 5. 通常情况下我们自定义的类如果使用equals()的话也通常是比较两个对象的实体内容是否相同。那么我们就需要对Object类中的equals()进行重写.* 重写的原则比较两个对象的实体内容是否相同.*/
public class EqualsTest {public static void main(String[] args) { //引用类型Customer cust1 new Customer(Tom,21);Customer cust2 new Customer(Tom,21);System.out.println(cust1 cust2);//falseString str1 new String(atguigu);String str2 new String(atguigu);System.out.println(str1 str2);//falseSystem.out.println(****************************);System.out.println(cust1.equals(cust2));//false---true//调用Object类中定义的equals()和的作用是相同的System.out.println(str1.equals(str2));//true//像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后比较的不是两个引用的地址是否相同而是比较两个对象的实体内容是否相同。Date date1 new Date(32432525324L);Date date2 new Date(32432525324L);System.out.println(date1.equals(date2));//true }
}重写equals()
Object 的equals方法本质为
public boolean equals(Object obj) {return (this obj);}拿String重写的的equals进行举例 1.先判断引用地址是否相等相等直接返回true 2.判断传入的anObject是否为String类型 3.向下转型强转为String 4.得到长度n 5.拿长度n和传入形参anObject进行对比吗不相同返回false 6.循环进行数组内数据的比较相同返回true否则返回false
public boolean equals(Object anObject) {//判断引用地址if (this anObject) {return true;}if (anObject instanceof String) {//判断是否为String //向下转型强转为String//形参是anObject实参是String类型传入类型会自动类型提升不强转的话“编译”的时候点不出来String的结构//“运行”的时候实际上anObject形参收到的是String类型的对象运行的时候这里强转不强转无所谓问题时编译和运行不一样起码要让代码写上去。String anotherString (String)anObject;int n value.length;//当前字符串的长度if (n anotherString.value.length) {//和形参的字符串长度对比char v1[] value;char v2[] anotherString.value;int i 0;while (n-- ! 0) {//循环比较if (v1[i] ! v2[i])return false;i;}return true;}}return false;}