==与equal的区别

123 阅读2分钟

==equal对比

了解数据类型

基本数据类型(原生类)分为:整数类型、浮点类型、字符类型、布尔类型这四个类型

八大基本数据类型(直接存储值):

Byte,short,int,long,double,folat,boolean,char

byte占一个字节,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,

注意:八大基本数据类型对应着各自的封装类型的包装类且不进行初始化时值默认为空(基本数据类型必须初始化),并且属于引用类型;

引用类型:类、接口、数组;

引用类型变量中存储的是地址,对应的地址存储数据;

类型赋值

基本类型,值就直接保存在变量中。

引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。

基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。

引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。这个用底层地址指向来确定;

 

了解变量分类

数据类型:基本数据类型,引用数据类型;

声明位置:

成员变量:

类变量:类加载时链接时给类变量默认赋值,初始化阶段:给类变量显式赋值即静态代码块赋值

实例变量:随着对象创建,在堆中分配实例变量空间,并进行默认赋值

局部变量:使用前必须进行显示赋值,否则编译不通过;

 

比较

"=="比较基本数据类型时比较的是表面值内容

比较两个对象时比较的是两个对象的内存地址值(比较两个引用是否引用内存中的同一个对象)

equals方法,注意:基本数据类型没有equals方法

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址

具体类的实现

String Integer Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容

StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, Object类中的equals方法是用来比较“地址”的,所以等于false.

对于非字符串变量来说,"==“和”equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

两个空间的地址不同,返回到栈中的引用的值也就不同,所以这时候i1 == i2返回false