zoukankan      html  css  js  c++  java
  • (面试题)有关Integer

    今天在一家公司做了个面试题:运行下列代码,输出结果是什么

      Integer a=new Integer("12");
      Integer b=new Integer("12");
      
      if (a.equals(b))
      {
       System.out.println(true);
      }
      else
      {
       System.out.println(false);
      }
      
      if (a==b)
      {
       System.out.println(true);
      }
      else
      {
       System.out.println(false);
      }

    很显然,结果为:

    true
    false

    本人反而搞错了,只怪于对于Integer对象和Integer.valueOf方法记混淆了,虽然通过了面试,但这个错误令人汗颜呀!!!

    在此介绍一下Integer Long对象的valueOf方法

    ------------------------------------------------------------------------------------

    Integer.valueOf 缓存了-128到127的Integer对象

    测试代码:
             boolean b1 =  Integer.valueOf(127)==Integer.valueOf(127); // true
             boolean b2 = Integer.valueOf(128)==Integer.valueOf(128) ; // false

             boolean b3 =  Integer.valueOf(-128)==Integer.valueOf(-128); // true
             boolean b4 = Integer.valueOf(-129)==Integer.valueOf(-129) ; // false

    Integer.valueOf()的源代码及注释:
    注释部分:
    If a new Integer instance is not required, this method should generally be used in preference to the constructor Integer(int), as this method is likely to yield significantly better space and time performance by caching frequently requested values.
    注释结束。
    public static Integer valueOf(int i) {
        final int offset = 128;
        if (i >= -128 && i <= 127) { // must cache
            return IntegerCache.cache[i + offset];
        }
            return new Integer(i);
    }

    由上面可见,valueOf会将常用的值(-128 to 127)cache起来。当i值在这个范围时,会比用构造方法Integer(int)效率和空间上更好。
    因此,对小数据intInteger封装,尽量的使用Integer.valueOf()创建,而不要使用new来创建。因为Integer类缓存了从-128256个 状态的Integer,减少了重复对象的创建。
    Long也是如此

    小结:对于比较偏的知识点,要记的就一定要记牢!

  • 相关阅读:
    java内存溢出
    jstack命令使用
    JVM问题排查步骤
    c++指针常量和常量指针
    c++ 通讯录
    冒泡排序
    翻转数组
    敲桌子
    求一个100-999之间的水仙花数
    elasticsearch 模板的使用
  • 原文地址:https://www.cnblogs.com/qqzy168/p/3277977.html
Copyright © 2011-2022 走看看