zoukankan      html  css  js  c++  java
  • 关于自动拆装箱时的陷阱

     1 package part10;
     2 
     3 /*
     4  * 自动装箱的陷阱
     5  * 1、两个包装类进行比较时,包装类的"=="运算在不遇到算术运算的情况下不会自动拆箱,如下例若判断c==g则会报编译错误;
     6  * 2、两个包装类进行比较时, 包装类的"equals()"方法不处理数据转型的关系,如下例的g.equals(a+b)为false;
     7  * 3、对于Integer类,当值在-128-127之间时,会使用Integer.ValueOf()方法直接从缓存中取出相应对象,
     8  * 而当值不在这个范围内时会使用Integer.ValueOf()方法new一个Integer对象,如下例的e和f不是同一个对象
     9  * 的引用,而c和d是同一个对象的引用;
    10  * 4、当一个包装类与一个基本数据类型进行比较或两个基本数据类型进行比较时,"=="运算会自动拆箱、自动类型转换。
    11  */
    12 public class AutomaticPackingTest {
    13     
    14     public static void main(String[] args) {
    15         Integer a = 1;
    16         Integer b = 2;
    17         Integer c = 3;
    18         Integer d = 3;
    19         Integer e = 321;
    20         Integer f = 321;
    21         Long g = 3L;
    22         int h = 321;
    23         int i = 321;
    24         long j = 321;
    25         
    26         System.out.println(c==d);
    27         System.out.println(e==f);
    28         System.out.println(e.equals(f));
    29         System.out.println(h==i);
    30         System.out.println(i==e);
    31         System.out.println(c==(a+b));
    32         System.out.println(c.equals(a+b));
    33         System.out.println(g==(a+b));
    34         System.out.println(g.equals(c));
    35         System.out.println(g.equals(a+b));
    36         System.out.println(i==j);
    37         System.out.println(j==e);
    38         System.out.println(e.equals(j));
    39     }
    40 
    41 }

    运行结果为:

  • 相关阅读:
    转自 陈皓 博客 《提高效率》
    codevs 1098 均分纸牌 2002年NOIP全国联赛提高组 x
    codevs 1160 蛇形矩阵x
    【説明する】进制转换
    欧几里得?x
    codevs 1020 孪生蜘蛛 x
    [HDOJ5883]The Best Path(欧拉回路,异或)
    [HDOJ5889]Barricade(spfa,最大流)
    [PAT L2-001] 紧急救援(spfa,最短路计数, dp)
    [CF717E]Paint it really, really dark gray(dfs,构造)
  • 原文地址:https://www.cnblogs.com/zhangyu-720/p/9976021.html
Copyright © 2011-2022 走看看