从Java到全栈,开发带SKU的实在企业级电商我的项目(附赠整套UI框架,配套降级Vue3.0内容)

超清原画 残缺无密 获取ZY:网盘链接
==介绍

它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(根本数据类型==比拟的是值,援用数据类型==比拟的是内存地址)。

根本数据类型:byte,short,char,int,long,float,double,boolean。他们之间的比拟,利用双等号(==),比拟的是他们的值。
援用数据类型:当他们用(==)进行比拟的时候,比拟的是他们在内存中的寄存地址(确切的说,是堆内存地址)。

举个例子:

public static void main(String[] args) {    int i = 100;//根本数据类型    int ii = 100;//根本数据类型    Integer j = 100;//援用类型    Integer jj = 100;//援用类型    Integer k = new Integer(100);//援用类型    Integer kk = new Integer(100);//援用类型    System.out.println("i的地址:" + System.identityHashCode(i));    System.out.println("ii的地址:" + System.identityHashCode(ii));    System.out.println("j的地址:" + System.identityHashCode(j));    System.out.println("jj的地址:" + System.identityHashCode(jj));    System.out.println("k的地址:" + System.identityHashCode(k));    System.out.println("kk的地址:" + System.identityHashCode(kk));    //根本类型互相比拟其中的值,所以得出true    System.out.println("i == ii 后果:" + (i == ii));    //当int的援用类型Integer与根本类型进行比拟的时候,包装类会先进行主动拆箱    //而后与根本类型进行值比拟,所有得出true    System.out.println("i == j 后果:" + (i == j));    //同上,包装类先拆箱成根本类型,而后比拟,得出true    System.out.println("i == k 后果:" + (i == k));    //都是援用类型,所有比拟的是地址,因为j与jj的地址雷同,得出true    System.out.println("j == jj 后果:" + (j == jj));    //都是援用类型,所有比拟的是地址,因为k与kk的地址不雷同,得出false    System.out.println("k == kk 后果:" + (k == kk));}

复制代码
输入后果:
i的地址:713338599
ii的地址:713338599
j的地址:713338599
jj的地址:713338599
k的地址:168423058
kk的地址:821270929
i == ii 后果:true
i == j 后果:true
i == k 后果:true
j == jj 后果:true
k == kk 后果:false
复制代码
疑难点:为什么j和jj的地址是一样的,k与kk的地址却不一样呢? 答案:在-128~127的Integer值并且以Integer x = value;的形式赋值的参数,x会从包装类型主动拆箱成根本数据类型,以供重用!所以,j、jj的内存地址都是一样的! 上面咱们把100变成1000试试!

public static void main(String[] args) {    int i = 1000;//根本数据类型    int ii = 1000;//根本数据类型    Integer j = 1000;//援用类型    Integer jj = 1000;//援用类型    Integer k = new Integer(1000);//援用类型    Integer kk = new Integer(1000);//援用类型    System.out.println("i的地址:" + System.identityHashCode(i));    System.out.println("ii的地址:" + System.identityHashCode(ii));    System.out.println("j的地址:" + System.identityHashCode(j));    System.out.println("jj的地址:" + System.identityHashCode(jj));    System.out.println("k的地址:" + System.identityHashCode(k));    System.out.println("kk的地址:" + System.identityHashCode(kk));    //根本类型互相比拟其中的值,所以得出true    System.out.println("i == ii 后果:" + (i == ii));    //当int的援用类型Integer与根本类型进行比拟的时候,包装类会先进行主动拆箱    //而后与根本类型进行值比拟,所有得出true    System.out.println("i == j 后果:" + (i == j));    //同上,包装类先拆箱成根本类型,而后比拟,得出true    System.out.println("i == k 后果:" + (i == k));    //都是援用类型,所有比拟的是地址,因为j与jj的地址不雷同,得出false    System.out.println("j == jj 后果:" + (j == jj));    //都是援用类型,所有比拟的是地址,因为k与kk的地址不雷同,得出false    System.out.println("k == kk 后果:" + (k == kk));}

复制代码
输入后果:
i的地址:713338599
ii的地址:168423058
j的地址:821270929
jj的地址:1160460865
k的地址:1247233941
kk的地址:258952499
i == ii 后果:true
i == j 后果:true
i == k 后果:true
j == jj 后果:false
k == kk 后果:false
复制代码
当j、jj超出-128~127区间的时候,地址就变了,所以比拟的后果就是false。 再看其它的包装器主动拆箱状况:
|类型|形容| |:–:|:–:| |Boolean |全副主动拆箱| |Byte |全副主动拆箱| |Short|-128127区间主动拆箱| |Integer|-128127区间主动拆箱| |Long |-128127区间主动拆箱| |Float |没有拆箱| |Doulbe |没有拆箱| |Character |0127区间主动拆箱|
equals()办法介绍

它的作用也是判断两个对象是否相等。但它个别有两种应用状况:

状况1:类没有笼罩 equals() 办法。则通过 equals() 比拟该类的两个对象时,等价于通过“==”比拟这两个对象。
状况2:类笼罩了 equals() 办法。个别,咱们都笼罩 equals() 办法来比拟两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

Boolean、Byte、Short、Integer、Long、Float、Doulbe、Character 8种根本类型的包装类都重写了 equals() 办法,所以比拟的时候,如果内容雷同,则返回 true,例如:
//因为内容雷同,返回的都是true
System.out.println("j.equals(jj) 后果:" + (j.equals(jj)));
System.out.println("(k.equals(kk) 后果:" + (k.equals(kk)));
复制代码
String类型的比拟介绍

string是一个十分非凡的数据类型,它能够通过String x = value;的形式进行赋值,也能够通过String x = new String(value)形式进行赋值。

String x = value;形式赋予的参数,会放入常量池内存块区域中; String x = new String(value)形式赋予的参数,会放入堆内存区域中,当成对象解决。
举个例子:

public static void main(String[] args) {    String a = new String("ab"); // a 为一个援用    String b = new String("ab"); // b为另一个援用,对象的内容一样    String aa = "ab"; // 放在常量池中    String bb = "ab"; // 从常量池中查找    System.out.println("a地址:" + System.identityHashCode(a));    System.out.println("b地址:" + System.identityHashCode(b));    System.out.println("aa地址:" + System.identityHashCode(aa));    System.out.println("bb地址:" + System.identityHashCode(bb));    //地址雷同,所以返回true    if (aa == bb) {        System.out.println("aa==bb");    }    // 地址不同,非同一个对象,所以返回false    if (a == b) {        System.out.println("a==b");    }    //地址不同,然而内容雷同,所以返回true    if (a.equals(b)) {        System.out.println("aEQb");    }}

复制代码
输入后果:
a地址:713338599
b地址:168423058
aa地址:821270929
bb地址:821270929
aa==bb
aEQb
复制代码
为什么string的equals()办法比拟返回true,因为string重写了equals()办法,源码如下:

public boolean equals(Object anObject) {    if (this == anObject) {        return true;    }    if (anObject instanceof 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;}

复制代码
如果内容雷同,则返回true!
总结:如果须要比拟某个对象是否雷同,肯定要重写equals(),比拟其中的内容是否雷同,如果雷同,返回true;否则,返回false!