==判断的是引用,而引用在java上指内存地址,是new出来的。比如
int b=new int(1);//表示向内存申请一个地址1存储值1,用b来表示这个地址。
int a=new int(2);//表示向内存申请一个地址存2储值2,用a来表示这个地址。
int c=new int(2);//表示向内存申请一个地址3存储值2,用c来表示这个地址。
System.out.println(a==c);//结果为false,判断的是引用,也就是地址
关于内存怎么分配地址这件事由系统决定,可以看看heap的源码。里面就有new的定义。
int d=2;//常量池中找int池,在int池中找到2,然后用d表示2在常量池中的位置。常量池地址是由系统分配的,但是肯定和我们new的不一样。
Objects.equals(a,b)
先判断a和b的类型,类型不同直接返回false,类型相同再判断值。
short e=1;
Objects.equals(e,a);//直接false
Objects.equals(e,(short)a);//返回true
3关于a.equals(b):
这个是object对象定义的,所以可以重写的。根据需求来,比如空指针,引用,内容(值)比较。