今天在公司主要熟悉表中字段的业务,鉴于暂时没有完全掌握,来说说在技术上对Java的一些补充。首先是Java中equals()和==的区别,equals()和==要分对象来比较。
第一,如果是基本数据类型byte,short,char,int,long,float,double,boolean,他们的比较只能有==来进行。
public class Fengkuan1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int int1=1;
byte byte1=1;
long long1=1;
boolean boolean1=true;
boolean boolean2=false;
System.out.print(int1==byte1);
System.out.print(int1==long1);
System.out.print(boolean1==boolean2);
}
}
第二,如果比较的Object对象也是没有区别的,equals()和==都比较的是地址值。
public class Fengkuan2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Object obj1="ad";
Object obj2="ad";
System.out.print(obj1==obj2);
System.out.print(obj1.equals(obj2));
}
}
既然比较的是地址值,那么为什么是相同的呢,以为在Java的JVM里面有一个缓冲池,只要没有新开辟内存空间,在缓冲池里面有的,那么他们的地址值都相同。
第三,如果是Sring类或者其他继承Object类,然后改写了里面equals()方法,那么情况就不同了。
public class Fengkuan {
public static void main(String[] arg)
{
String str1="Object"; //1
String str2="Object"; //2
String str3=new String("Object"); //3
System.out.print(str1==str2);
System.out.print(str1.equals(str2));
System.out.print(str1==str3);
System.out.print(str1.equals(str3));
}
}
结果是true true false ture。
第一个true很好理解,第二个true就不好理解了。为什么呢,因为String方法重写了equals(),那么比较的不再是地址值了,而是地址值里面的内容,地址值里面内容相同就行,第三个比较的是地址值,新开辟的地址值肯定不一样。第四个比较的是内容,内容一样就行了。