首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java对数值的处理有关问题

2012-04-18 
java对数值的处理问题代码如下:public class TestValue {public static void main(String[] args) {Intege

java对数值的处理问题
代码如下:
public class TestValue {
public static void main(String[] args) {
Integer a = 333;
Integer b = 444;
Long c = 777L;
System.out.println(c==(a+b));
}
}
输出为true。

调用javap查看字节码文件(部分):

  24:aload_3
  25:invokevirtual#35; //Method java/lang/Long.longValue:()J
  28:aload_1
  29:invokevirtual#39; //Method java/lang/Integer.intValue:()I
  32:aload_2
  33:invokevirtual#39; //Method java/lang/Integer.intValue:()I
  36:iadd


可以看出 c==(a+b)其实变成了c.longValue()==(a.intValue+b.intValue)

但是前者依然是long,后者依然是int,二者占用的slot应该是不一样的,如果==比较的是对象的内存地址,应该输出false才对,为什么输出的是true呢?

[解决办法]
基本类型是比较内容吧?
[解决办法]
java中的数据类型,可分为两类: 
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 
他们之间的比较,应用双等号(==),比较的是他们的值。 
2.复合数据类型(类) 
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

-----------------------------------------------------
Integer自动拆箱之后其实用的就是基本类型int 这个时候其实比的就是值了

热点排行