java对象相等
Ⅰ java 怎么判断两个对象是否相等
java中如果两对象(obj1,obj2)相等,那么在修改obj2的时候,obj1的值也会改变。其实相当于内存中只有一个对象,而obj1和obj2连个变量都指向同一个对象。
如果两个变量引用的是两个不同地址的对象,即使对象的内部参数都是一样的,系统也会认为是不同的两个对象
至于比较方法,简单一点的可以使用==。严谨一些就用equals
Ⅱ java中equals使用方法
java中equals使用方法:
equals 方法是String类从它的超类Object中继承的, 被用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写。
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。例如:
s1=newString("abc");
s2=newString("abc");s1.equals(s2)是true
3.对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
classA
{
Aobj1=newA();
Aobj2=newA();
}
obj1.equals(obj2)是false
Ⅲ java浅拷贝的对象两个内向相等吗
两个对象内向相等。
java对象默认继承java。long。Object类,里面包含clone方法。JDKAPI的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象是一个新对象,而不是一个引用。二是拷贝对象与用new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。
java中的基本数据类型判断是否相等,直接使用==就行了,相等返回true,否则,返回false。
Ⅳ java怎么比较两个对象是否相等
一、java中的基本数据类型(int、double、short、long、byte、float、boolean、char)判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false。
二、但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,
obj1==obj2 判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。
三、如果想要自定义两个对象(不是一个对象,即这两个对象分别有自己的一块内存)是否相等的规则,那么必须在对象的类定义中重写equals()方法,如果不重写equals()方法的话,默认的比较方式是比较两个对象是否为同一个对象。
在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常见的就这些了,具体可以查看API中类的equals()方法,就知道了。
Ⅳ 深入java的equals方法,怎么比较两个对象的
当定义一个类时,首先这个类会继承Object类(所有类的父类)的equals方法,然后开发者可以根据具体业务场景去考虑要不要重写equals方法。
publicbooleanequals(Objectobj){
return(this==obj);
}
上面代码即是Object的equals方法的实现, == 判断,即两个对象的地址完全一样的时候才相等。
当开发者定义类时不重写equals方法,则实际调用中使用Object这个父类的equals方法实现。
下面看看String的equals方法:
publicbooleanequals(ObjectanObject){
if(this==anObject){
returntrue;
}
if(anObjectinstanceofString){
StringanotherString=(String)anObject;
intn=value.length;
if(n==anotherString.value.length){
charv1[]=value;
charv2[]=anotherString.value;
inti=0;
while(n--!=0){
if(v1[i]!=v2[i])
returnfalse;
i++;
}
returntrue;
}
}
returnfalse;
}
这就是String重写的equals方法,可以仔细看看,很有参考价值。
接下来写段类定义的代码:
publicclassPerson{
privateStringname;//姓名
privateintage;//年龄
privateStringspeciality;//特长
@Override
publicbooleanequals(Objectobj){
//两个对象是同一个时,直接returntrue
if(this==obj){
returntrue;
}
if(objinstanceofPerson){
//比较对象也是Person对象时,判断name和age是否都相同
Personp=(Person)obj;
returnname.equals(p.name)&&age==p.age;
}
returnfalse;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetSpeciality(){
returnspeciality;
}
publicvoidsetSpeciality(Stringspeciality){
this.speciality=speciality;
}
}
测试代码:
publicclassTest{
publicstaticvoidmain(String[]args)throwsIOException{
Personp1=newPerson("张三",20,"java");
Personp2=newPerson("张三",20,"python");
System.out.println(p1.equals(p2));
}
}
根据Person重写的equals方法可以知道,运行结果为 true
如果Person没有重写equals方法,那么会调用Object的equals方法,运行结果为 false
所以实际怎么比较两个对象这完全是看开发者也就是你自己的意思
Ⅵ java 中如何比较两个数组对象的内容是否相等急
char[] a = {'a', 'b'};
char[] b = {'a', 'f'};
String sa = String.valueOf(a);
String sb = String.valueOf(b);
if( sa.equals(sb) )
System.out.println("两个数组相等");
else
System.out.println("两个数组不相等");