2-1_ 对于“=”,即将右边的值赋给左边变量,右边不论是什么,只要能生成一个值就行。对于常量的赋值,例如a=b,只是将右边的内容复制给左边,即使再修改a的内容,b(右值不受影响);对于对象的赋值,例如c=d,我们实际是将一个对象的引用(d)赋给另一个对象的引用(c),那么c和d都指向原来d的对象(内存空间)。
2-2_
一、java当中的数据类型和“==”的含义:
基本数据类型(也称原始数据类型) ,他们之间的比较,应用双等号(==),比较的是他们的值。
复合数据类型(类):当他们用(==)进行比较的时候,对象实体的内存地址,即堆内存的地址。
二、equals()方法介绍:
JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被复写了,如String等,在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。
三、String中的equals()和==比较:
equals()比较的是字符串的内容是否相等,==比较的是字符串实体的内存地址是否相等。
String ff=”bb”;
String hh = “bb”;
System.out.println(ff==hh);//结果为true,并没有开辟新的内存空间,引用的指向是一样的。
String gg = new String(“bb”);
System.out.println(ff==gg);//结果为false,内存地址不一样了。
System.out.println(ff.equals(gg));//结果为true,内容一致