• (面试题)有关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也是如此

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

  • 相关阅读:
    windows下安装和设置Git客户端
    普通年金终值和现值计算(白话版)
    Git Http Server
    Python容器数据类型——collections
    模拟二进制实现减法
    自己写的线程池
    买书问题
    电梯调度算法
    Python文本常量和模板——string
    shell变量设置与显示
  • 原文地址:https://www.cnblogs.com/qqzy168/p/3277977.html
Copyright © 2020-2023  润新知