java中的操作符:1.操作符接收一个或多个参数,并生成一个新值;

                             2.有些操作符可以改变操作数本身的值,这被称为副作用,例如自增,自减操作符,这类带有副作用的操作符  的最普遍的用途就是用来产生副作用。但是使用此类操作符生成的值,与没有副作用的操作符生成的值没有什么区别。

                             3.几乎所有的操作符都只能操作"基本类型",例外的是"=","==","!="。这三个操作符可以操作所有对象。

                             4.String类支持"+","+="操作符。

 

java中的关系操作符:">",">=","<","<=","==","!="

关系操作符生成的是一个boolean类型的结果,它们计算的是操作数的值之间的关系。

"=="和"!="适用于所以基本数据类型,并且,它们两也适用于所有对象,然后,对于对象来说,"=="和"!="比较的是对象的引用,如果想比较对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于基本类型,基本类型直接使用"=="和"!="即可。

接下来着重测试下对象之间的等价性。

1.基本类型与基本类型比较

   基本类型之间的比较只能用"=="或"!=",且比较的是他们的值。示例:

java 实现关联系统交互接口请求响应报文存储_基本类型

输出结果为:

java 实现关联系统交互接口请求响应报文存储_基本类型_02

2.基本类型与基本类型的包装类型进行"=="的比较时,包装类型会自动拆箱为基本类型,然后比较它们的值。

java 实现关联系统交互接口请求响应报文存储_包装类_03

输出结果:

java 实现关联系统交互接口请求响应报文存储_操作符_04

3.基本类型与基本类型的包装类型进行equals()方法的比较时,基本类型会先自动装箱为包装类型,然后先比较两者的包装类型是否一样,或者说基本类型装箱后是否为包装类型的一个实例,如果不是,直接返回false。如果是,则 2个包装类自动拆箱,比较值是否一样。示例:

java 实现关联系统交互接口请求响应报文存储_操作符_05

输出结果:

java 实现关联系统交互接口请求响应报文存储_操作符_06

4.基本类型的包装类型之间用"=="进行比较时,比较的是对象之间的引用是否相同

这里需要提到Integer类型的一个缓冲对象概念

当我们定义Integer e=1时,会调用Integer类的ValueOf方法,方法内容如下:

java 实现关联系统交互接口请求响应报文存储_包装类_07

可以看到方法是返回了一个Integer的对象,但是在返回之前做了一个判断,判断当前参数i的值是否在-128-127之间,并且在缓冲区间里是否存在此对象,如果同时满足2个条件,则返回这个对象的引用,否则,创建一个新对象,并将此对象存储在缓冲区间里。

程序初次执行时,我们定义Integer e=1时,缓冲区间中没有这个对象,即新创建一个Integer对象,它的引用为e。当我们再此定义Integer e1=1时,由于缓冲区间里已经有了这个对象e,直接返回了e的引用给了e1,所以e和e1是2个相同的引用指向了同一个对象。用"=="比较的是2个对象的引用,由于是同一个对象,引用肯定也相同,所以e==e1的结果为true。当然e.equal(e1)的结果也肯定为true,因为是同一个对象,所以对象的内容也相同。

java 实现关联系统交互接口请求响应报文存储_包装类_08

输出结果为:

java 实现关联系统交互接口请求响应报文存储_基本类型_09

与上面相反的是e2和e3都是定义的128,但不在缓冲区里面,所以没有缓冲下来,都是创建了2个新的对象,e2==e3比较的是引用,为false,e2.equal(e3)比较的是对象的内容,为true。

测试结果

java 实现关联系统交互接口请求响应报文存储_操作符_10

java 实现关联系统交互接口请求响应报文存储_操作符_11

5.基本类型的包装类型之间用equals()进行比较时,比较的是对象的内容是否相同,先判断2个包装类的类型是否相同,然后判断值是否相同

java 实现关联系统交互接口请求响应报文存储_基本类型_12

输出结果为:

java 实现关联系统交互接口请求响应报文存储_基本类型_13

6.非基本类型的对象之间的比较,用"=="比较时,比较的是对象的引用,用equals()比较的是对象的内容

java 实现关联系统交互接口请求响应报文存储_基本类型_14

输出结果为:

java 实现关联系统交互接口请求响应报文存储_操作符_15

7.对于自定义的对象来说,如果没有在自定义的类中覆盖equals()方法,那么equal()方法默认比较的还是对象的引用。

java 实现关联系统交互接口请求响应报文存储_操作符_16

输出结果为:

java 实现关联系统交互接口请求响应报文存储_基本类型_17

所在,在定义新类时,我们需要在新类中去实现equals()方法来比较对象的内容,而不是引用。

java大多数类库都实现了equals()方法,以便用来比较对象的内容,而非引用。