`
longgangbai
  • 浏览: 7340057 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于Integer的深度分析以及注意点

阅读更多

 

  在Integer中valueOf()和创建独享Integer的区别以及关系:

 

Integer类源代码如下:


 static final Integer cache[] = new Integer[-(-128) + 127 + 1];

 static {
     for(int i = 0; i < cache.length; i++)
  cache[i] = new Integer(i - 128);
 }
    }

    /**
     * Returns a <tt>Integer</tt> instance representing the specified
     * <tt>int</tt> value.
     * If a new <tt>Integer</tt> instance is not required, this method
     * should generally be used in preference to the constructor
     * {@link #Integer(int)}, as this method is likely to yield
     * significantly better space and time performance by caching
     * frequently requested values.
     *
     * @param  i an <code>int</code> value.
     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
     * @since  1.5
     */
    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);
    }

 

  

package com.easyway.commons.ispace.dev.lang.objects;


/**
 * 关于java中一些疑惑问题的以及分析
 * 
 * @author  longgangbai
 * @date 2010-5-10
 * @version 1.0
 * @since JDK6.0
 */
public class JavaQuestion {
	
	
	/**
	 * 在JDK1.5的基本类库中,对一些不可变类,如Integer类做了优化,它具有一个实例缓存,用来存放程序中经常使用的Integer实例。
	 * 如Integer中valueOf()方法。
	 * valueOf源代码如下:
	 *  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);
     *	}
	 * 在i在-128和127之间,第一次调用时创建Integer对象,非第一次从缓存中获取数据。
	 * 由此可见在程序中采用value()静态方法可以提供效率。
	 * 故在i不再-128到127之间时Integer.valueOf相等于new Integer()对象。
	 */
	public static void main(String[] args) {
		
		Integer a=Integer.valueOf(2);
		Integer b=Integer.valueOf(2);
		Integer c= new Integer(2);
		Integer d=new Integer(2);
		Integer aa=Integer.valueOf(234);
		Integer bb=Integer.valueOf(234);
		
		Integer cc= new Integer(234);
		Integer dd=new Integer(234);
		
		
		System.out.println("(a==b) ? "+(a==b));
		System.out.println("(c==d) ? "+(c==d));
		System.out.println("(aa==bb) ? "+(aa==bb));
		System.out.println("(cc==dd) ? "+(cc==dd));
		//输出结果如下 :
		//      (a==b) ? true
		//      (c==d) ? false
		//  	(aa==bb) ? false
		//		(cc==dd) ? false
		//      (cc==aa) ? false
	}
	

}

 

分享到:
评论
4 楼 zengjz88 2012-04-28  
3 楼 后街男孩 2011-10-23  
2 楼 sea0108 2011-09-15  
1 楼 nobody2008 2011-05-31  
   学习了

相关推荐

    精彩编程与编程技巧-动态改变屏幕设置...

    #### 关键知识点 ##### 1. **Windows API 函数调用** - 在VB中,可以通过`Declare`语句声明并调用Windows API函数。 - 示例中的`lstrcpy_`函数即为一例,它来自`kernel32.dll`库,用于字符串复制。 - 语法结构...

    java代码-NodeTraverse 参考下图,输出 id 和 level 的映射 定义 根节点的 深度 是 0,子节点的深度是父节点的 深度 + 1

    一个简单的节点类(Node)可以包含以下属性:ID(标识节点)、子节点列表(children)以及深度(level)。例如: ```java public class Node { int id; List&lt;Node&gt; children; int level; public Node(int id) ...

    NOIp复赛注意事项(2016).pdf

    ### NOIp复赛注意事项解析 #### 一、赛前准备 **准考证与身份证明**:参加NOIp复赛的选手需携带准考证以及有效身份证件(如身份证或其他带照片的有效证件),这是入场的重要凭证。 **文具准备**:虽然考试提供...

    Parallel-DFS:深度优先搜索的并行算法

    注意,你需要根据实际情况实现`dfs`方法,它应包含标准的DFS逻辑,但以`target`作为起始点。 为了防止死锁和循环引用,还需要考虑同步机制。在上述示例中,`visited`集合用于跟踪已访问的节点,确保每个节点只被...

    精彩编程与编程技巧-如何动态改变屏幕设置?...

    ”明确指出文章的主题是关于编程技巧之一——如何在程序运行过程中动态地调整屏幕分辨率或颜色深度等设置。这对于游戏开发、演示软件等领域具有重要意义。 #### 描述解析 描述部分同样强调了文章的核心内容:通过...

    Leetcode部分试题解析

    注意处理溢出情况,以及正确处理负数。 17. **Reverse Bits**:反转一个32位整数的二进制位。可以逐位反转,也可以转换为字符串后操作再转换回来。 18. **House Robber**:打劫问题。这是动态规划的应用,计算在不...

    Java中常见异常类型及分析.pdf

    ### Java中常见异常类型及分析 #### 一、概述 在Java编程中,异常处理是一项重要的技术,它有助于开发者在程序运行过程中及时发现并处理错误,确保程序的稳定性和健壮性。Java语言中提供了丰富的异常处理机制,...

    java-leetcode面试题解Stack之第341题扁平化嵌套列表迭代器-题解.zip

    1. 定义一个`NestedIterator`类,包含一个`Stack&lt;Integer&gt;`,用于存储待返回的整数值,以及一个`Stack&lt;List&lt;Integer&gt;&gt;`,用于存储待遍历的子列表。 2. 在构造函数中,初始化这两个栈,并将输入的嵌套列表压入待遍历...

    2021-2022计算机二级等级考试试题及答案No.10461.docx

    **知识点**: 在设计Access表时,需要注意以下几点: - 每个字段的内容应该与表的主题紧密相关。 - 避免直接在表中存储可以通过其他字段推导或计算得到的数据。 - 尽可能地将数据分解成最小的逻辑部分来存储,以便更...

    整数划分代码实现

    在计算机科学中,这个问题常用于算法设计和分析,尤其是在动态规划、递归以及组合优化等领域有广泛应用。 在C语言中实现整数划分,通常会采用递归或非递归的迭代方法。下面我们将详细介绍这两种方法,并给出相关的...

    matlab 高级优化工具箱

    《MATLAB高级优化工具箱深度解析与应用指南》 MATLAB高级优化工具箱是MATLAB软件平台中的一个重要组件,专为解决各种优化问题而设计。它提供了丰富的算法库,覆盖了线性、非线性、二次规划、整数优化等多种类型的...

    剑指offer java实现

    ### 剑指Offer Java实现知识...以上是对《剑指Offer》中几个典型Java实现题目的详细解析,这些题目涵盖了数组、字符串、链表、二叉树以及栈和队列等基本数据结构的应用,有助于加深对Java编程的理解和实践能力的提升。

    java程序员华为面试题

    #### 二、具体知识点分析 ##### 1. String与StringBuffer的区别 **String** 是不可变对象,每次对String类型的修改都会创建新的String对象,这在大量字符串操作的情况下会严重影响性能。 **StringBuffer** 是可变...

    递归算法,用自身的结构来描述自身,称递归,VB6.0源代码编写

    - **定义函数**:在VB6.0中,使用`Function`关键字定义一个函数,比如`Function Recurse(n As Integer) As Integer`。 - **递归调用**:在函数体内部,调用自身,如`Recurse = n + Recurse(n - 1)`。 - **处理...

    VB-API-set-system-color.rar_set color_setsystemcolor

    在VB(Visual Basic)编程环境中,我们经常需要与操作系统进行深度交互,比如改变窗口或控件的颜色。在VB中,这种功能通常通过调用Windows API(应用程序接口)来实现,因为VB自身的基础库可能并不直接提供这样的...

    Java经典实例

    以下是对该资料中几个核心知识点的深度解析,包括获取环境变量、系统属性、字符串处理、数据类型操作以及日期时间管理。 #### 1. 获取环境变量与系统属性 在Java中,获取系统的环境变量和属性是常见的需求,这有助...

    Nutch搜索引擎·Nutch简单应用(第3期)

    Nutch搜索引擎的应用不仅限于简单的数据抓取和索引,它还能帮助开发者进行网页内容的深度分析,支持复杂网络数据的高效处理。对于希望构建个人搜索引擎或对互联网内容进行深入研究的用户来说,Nutch是一个非常实用的...

    Java面试宝典2010版

    以上只是部分知识点,面试宝典中还包括关于重载、覆盖、构造器、接口、线程、异常处理、集合框架、Java Web、数据库操作、XML解析、流行框架如Struts、Hibernate、Spring等方面的深度问题,需要对Java的全貌有深入...

Global site tag (gtag.js) - Google Analytics