(面试题)有关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)效率和空间上更好。
个 状态的Integer,减少了重复对象的创建。
Long也是如此。
小结:对于比较偏的知识点,要记的就一定要记牢!
(面试题)有关Integer的更多相关文章
- 面试题:Integer和int的区别?在什么时候用Integer和什么时候用int
/* * (1) int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类. * (2)int的默认值为0, 而Integer的默 ...
- 从一道面试题探究 Integer 的实现
记得有次面试,面试官问我: 如何写一个方法交换两个 Integer 类型的值? 当时心里一惊,这是把我当小白了呀!交换两个数的值还不容易么,最简单的直接搞一个中间变量,然后就可以交换了… … 面试官随 ...
- Java面试题之Integer.valueOf(String s);采用了什么设计模式
Integer.valueOf(String s);//采用了亨元设计模式: 亨元模式: 它是以一种“节约内存,提高性能”为出发点的设计模式,运用共享技术有效的支持大量细粒度对象的复用. 源码解析: ...
- Java基础知识强化67:基本类型包装类之Integer直接赋值的面试题
1. 面试题: Integer i = 1: i += 1: 做了哪些事情? (1)其中Integer i =1:做了自动装箱( 使用valueOf()方法,int ---> Integer ...
- Java Integer和String内存存储
标签: java内存string 2016-01-10 12:51 1545人阅读 评论(2) 收藏 举报 分类: Java(7) 版权声明:本文为博主原创文章,未经博主允许不得转载. 先看代码: ...
- 自动拆装箱(int,Integer)
包装类型Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个 ...
- Integer缓存机制-基本数据类型和包装类型-自动拆装箱
Integer缓存机制 总结: 1.jdk1.5对Integer新增了缓存机制,范围在-128-127(这个范围的整数值使用频率最高)内的自动装箱返回的是缓存对象,不会new新的对象,所以只要在缓存范 ...
- JavaEE基础(十三)
1.常见对象(StringBuffer类的概述) A:StringBuffer类概述 通过JDK提供的API,查看StringBuffer类的说明 线程安全的可变字符序列 B:StringBuffer ...
- JavaSE学习总结第13天_API常用对象3
13.01 StringBuffer的概述 StringBuffer类概述:线程安全的可变字符序列.一个类似于 String 的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序 ...
- 阶段01Java基础day13常见对象02
13.01_常见对象(StringBuffer类的概述) A:StringBuffer类概述 通过JDK提供的API,查看StringBuffer类的说明 线程安全的可变字符序列 B:简述安全问题 线 ...
随机推荐
- Swift语言精要 - Dictionary(字典)
字典以键值对的形式存储数据. 键不能重复,但是值可以重复. 基本语法用例: var states : Dictionary<String, String> = ["CA" ...
- LintCode: Count and Say
C++ class Solution { public: /** * @param n the nth * @return the nth sequence */ string countAndSay ...
- 微信小程序 - 下拉刷新(非组件)
详情见示例:refresh
- Yahoo邮箱最后登录,成为历史!
- MAC快捷方式记录
刚刚转到MAC,很多功能发现不能用,总结一下: 刷新页面:command+r 命令行,到行首:control+a 命令行,到行尾:control+e vim,到行尾:shift+$ vim,到行首:s ...
- JDK5.0 特性-线程 Condition
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291471.html import java.util.concurrent.Executor ...
- python获取PING结果
# -*- coding: utf-8 -*- import subprocess import re def get_ping_result(ip_address): p = subprocess. ...
- Linux驱动程序:统计单词个数
本例为Android升读探索(卷1):HAL与驱动开发 一书中附带的演示样例程序.现粘贴出来,以便查阅. 终端操作,可能用到的命令: insmond word_count.ko lsmod | gre ...
- ReactNative踩坑日志——代码执行方式(面向对象)
在ReactNative中,是以面向对象的方式执行代码的.处于同一{}內的代码以对象的形式执行,也就是说,程序虽然会自上而下执行代码,但是它会保证当前整个代码块內的语句执行完毕才执行下一代码块. 举个 ...
- 〖Linux〗简单的将Shell和一些文件打包成一个单独的“可执行文件”
有时候给别人分享一个工具的时候,同时需要提供的文件比较多: 如果分享一个压缩包还得教会对方如何解压.执行哪个脚本,感觉需要传输的内容多了就不方便: 把几个Shell脚本和文件打包成一个“单独的可执行文 ...