java Integer32和' '比较

小小丁灬 发布于 2016/08/31 16:44
阅读 384
收藏 0

有高手能解释下吗?

为什么

public static void main(String[] args) {
	Integer a=32;
	System.out.println(a==' ');
}




会成立

加载中
0
冷川
冷川
应为空格的十进制ascii码就是32,你a =33 ,a=='!',也一样是true。
0
如比如比
如比如比
在.class世界里,[System.out.println(a==' ');]的写法和[System.out.println((a==32));]是一样滴(不信你就 javap -c xxx.class看看)。虽然是Integer,但在比较时还是使用了[Method java/lang/Integer.intValue:()I],也就是相当于int型变量和char常量的比较。(在基本类型中间经常被提到的默认类型转换。4字节的int型的取值范围是包含2字节的char型的。)关于char型变量/常量的值,取决于编码,然在目前的大多数编码中0-127(或0-255)都是兼容ASCII编码的,或许在一个不兼容ASCII编码的环境中,这个结果或许会是false吧。
0
Shazi199
Shazi199
char 32 不就是空格。。这有什么好奇怪的。。
0
luokery
luokery
为啥java可以用单引号了。
luokery
luokery
回复 @loyal : 惭愧, 都没用到这样的操作!
loyal
loyal
...你不会java就别说话了.
0
巴林的狗尾草
巴林的狗尾草

楼上说的基本都是对的。楼主的代码会被编译成下面的方式。

  public static void main(String[] args) {
    Integer a = Integer.valueOf(32);
    System.out.println(a.intValue() == 32);
  }

这是因为JVM在处理char的运算的时候是转换成为int然后再进行操作的。

0
北极心
北极心
依旧是ASCII码的问题,突然发现在oschina碰到好多问这个问题的。。。。
0
虎爷
虎爷
只会C,在C里面是这样的,Java不了解
返回顶部
顶部