JLS中关于操作符 == 的学习

JLS7 15.21 Equality Operators

 

关于Java中的“==”操作符与“!=”操作符,发现各说纷纭,谁也不信了,保险起见,只好翻E文。别不信,工作多年的朋友也未必能把以下结果全部答对。

 

参考Page 515:


自己总结一下使用场景如下:

 

1.      一个操作数是基本数值类型,另一个是包装数值类型;或者两个操作数是同一个包装数值类型。

 

int a = 200; float b = 200L; System.out.println(a == b);//true

float a = 200; Long b = 200L; System.out.println(a == b); //true

  

Long a = 200L; Long b = 200L; System.out.println(a == b); //false超过-128-127的cache范围

Integer a = 200;Long b = 200L; System.out.println(a == b); //compile error

int a =200; Number b = 200; System.out.println(a == b); //compile error

 

float a = 10.000000000000000000000000000000000000f;

float b = 10.000000000000000000000000000000000001f;

System.out.println(a== b); //true

 

float a = 0.000000000000000000000000000000000000f;

float b = 0.000000000000000000000000000000000001f;

System.out.println(a== b); //false

 

double a =Double.MAX_VALUE;

double b =Double.MAX_VALUE + 1;

System.out.println(a== b); //true

 

 

2.      boolean或Boolean类型的两个操作数之间比较。

 

boolean a = true;Boolean b = true; System.out.println(a == b); //true

Boolean a = true;Boolean b = true; System.out.println(a == b); //true

Boolean a = new Boolean(false); Boolean b = false; System.out.println(a == b);//false

boolean a = true;int b = 200; System.out.println(a == b); // compile error

 

3.      一个操作数的类型与另一个操作数类型相同,或是其父类型;或者至少有一个操作数是null。

 

Long a = 200L; Number b = 200; System.out.println(a == b); //false

Long a = 200L; System.out.println(a == null); //false

 



具体章节摘要如下:


15.21.1 Numerical EqualityOperators == and !=

 

如果一个操作数是基本数值类型,另一个是包装数值类型,会进行拆箱处理。

 

如果一个操作数是NaN,那么==的结果就是false。事实上,x!=x当且仅当x是NaN。

   

-0.0==0.0的结果是true,其他情况下任何两个不同的浮点值==的结果都是false。

 

 

原文片段:



15.21.2 Boolean EqualityOperators == and !=




15.21.3 Reference EqualityOperators == and !=



总结:理解好JLS中的这段规则,Java的内存区域,自动拆装箱。

另外,关于String类型的有个类似的讨论,参考:http://developer.51cto.com/art/201009/225071_all.htm


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值