问:java中常用数据类型的拆箱与装箱有什么坑

 答: 拆箱与装箱发生一般发生在常用的数据类型中,也就是八个基本类型,外加一个String

    

 数据类型包装类说明
shortShort
intInteger
longLong
floatFloat
doubleDouble
byteByte
booleanBoolean
char
Character
StringString

举例:

   Integer a = 3 ;// 自动装箱,java编译器会这样处理 Integer a = Integer.valueOf(3) ,

   int b = a; // 自动拆箱,java编译器会这样处理 int b = a.intValue();

其它类型与上面类似。

要避免的坑。

1. 当有代码 

    


String a = "abc";
String b = a;
String c = a + "";
String d = new String("abc");
System.out.println(a == b); // true
System.out.println(b == c); // false
System.out.println(a == c); // false
System.out.println(a.equals(b)); // true
System.out.println(b.equals(c)); // true
System.out.println(a.equals(c)); // true
System.out.println(a == d); // false
System.out.println("abc" == d); // false

System.out.println("abc" == a); // true


Integer h = 100;
Integer i = 100;
Integer j = 200;
Integer k = 200;

int l = 200;
int m = 200;
System.out.println(h == i); // true
System.out.println(j == k); // false
System.out.println(j == m); // true
System.out.println(l == m); // true


Boolean o = true;
Boolean p = new Boolean(true);
Boolean q = true;
System.out.println(o == p); // false
System.out.println(o == q); // true


  解释 ,由于使用自动装箱,所在jvm会缓存一些数据如int (-128-127)所以h ==i是true, j==k 是false;

    那么

    I,为什么j==m 为true呢?

         因为其进行了一次拆箱的操作。转为原始类型进行判断。

    

告诉我们:

    在程序里用常量的时候比如一些状态,尽量使用127以下的数,使用int定义。

    public final static int OP_OPEN = 1;//打开为1


转载于:https://my.oschina.net/u/727875/blog/220022

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值