`

Integer的“==”返回值

阅读更多

 

/**
 * Created by spring on 10/26/13.
 */
public class Test {
    public static void main(String args[]){

        Integer i_128 = -128;
        Integer j_128 = -128;

        System.out.println(i_128==j_128);

        Integer i_129 = -129;
        Integer j_129 = -129;

        System.out.println(i_129==j_129);


        Integer i128 = 128;
        Integer j128 = 128;

        System.out.println(i128==j128);

        Integer i127 = -127;
        Integer j127 = -127;

        System.out.println(i127==j127);


    }
}

 输出:

true
false
false
true

 

这个原因想必大家都知道,Integer是一个不可变类,所以对一些常用的值(-128--127)进行了缓存,避免对象的频繁创建和销毁。但是从jdk1.5开始这个缓存的范围可以由开发者根据需要自己指定,不过下限还是-128,上限可以修改。jdk的源码如下:

    /**
     * Cache to support the object identity semantics of autoboxing for values between
     * -128 and 127 (inclusive) as required by JLS.
     *
     * The cache is initialized on first usage.  The size of the cache
     * may be controlled by the -XX:AutoBoxCacheMax=<size> option.
     * During VM initialization, java.lang.Integer.IntegerCache.high property
     * may be set and saved in the private system properties in the
     * sun.misc.VM class.
     */

    private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low));
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }

 

    /**
     * Returns an {@code Integer} instance representing the specified
     * {@code int} value.  If a new {@code Integer} 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.
     *
     * This method will always cache values in the range -128 to 127,
     * inclusive, and may cache other values outside of this range.
     *
     * @param  i an {@code int} value.
     * @return an {@code Integer} instance representing {@code i}.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

 

分享到:
评论

相关推荐

    景兴达门禁

    实时处理流程 1、打开网络 function JX102R_open_Net(): integer; 2、绑定端口,这步可选,... 如果返回值为零,说明有刷卡请求 判断后,调用function JX102R_Rsp_Card(ReaderNO, TypeId: integer): integer;应答

    mybatis返回Integer

    在使用MyBatis进行数据操作时,我们经常会遇到关于返回值类型的困扰,特别是涉及到基本类型int和对象类型Integer之间的转换。标题"mybatis返回Integer"指的是在MyBatis的映射文件或者Mapper接口中,使用Integer作为...

    有返回值的线程

    标题中的“有返回值的线程”指的是在编程中如何在线程执行完后获取到一个结果。线程通常用于执行异步任务,而当我们需要这些任务执行的结果时,就需要用到带返回值的线程机制。Java语言中,可以通过实现`Callable`...

    VB.NET 2008调用SQL存储过程并返回值示例

    本示例将深入讲解如何在VB.NET中调用存储过程,包括参数传递、接收返回值、处理存储过程中的错误以及控制流程。 首先,我们需要创建一个连接到SQL Server数据库的对象。这可以通过`SqlConnection`类实现,提供...

    vb操作cmd命令行读取返回值

    Dim ret As Integer ret = Shell("cmd /c dir", vbNormalFocus) ``` 这里的`/c`参数表示CMD应该执行完指定的命令后立即退出,`dir`是CMD命令,用于列出目录内容。 然而,仅使用`Shell`函数无法直接获取命令的输出...

    delphi通用函数单元一

    function IntToStrEx(Value: Integer; Len: Integer; FillChar: Char = '0'): string; {测试通过} {* 扩展整数转字符串函数 Example: IntToStrEx(1,5,'0'); 返回:"00001"} function IntToStrSp(Value: Integer; ...

    VB 调用oracle 带返回值的存储过程

    Dim maxValue As Integer = maxIdParam.Value ``` 4. **处理返回值**: 在调用ExecuteNonQuery执行存储过程后,可以通过OracleParameter对象的Value属性获取返回值。在这个例子中,我们得到了用户ID的最大值。 5. *...

    精彩编程与编程技巧-如何在VB中实现Undo(撤消)功能...

    `UndoResult`变量存储了函数返回的结果,通常情况下,如果Undo成功执行,返回值将是非零值。 #### 示例代码解析 接下来,让我们进一步分析上述示例代码: ```vb Declare Function SendMessage Lib "user" (ByVal ...

    获得鼠标处颜色RGB值

    这个函数接受三个参数:设备上下文句柄(hdc)、水平坐标(x)和垂直坐标(y),返回值是一个整数,代表了该位置像素的颜色值。 为了获取鼠标位置的坐标,我们需要监听WM_MOUSEMOVE消息,这是一个系统级别的鼠标移动消息...

    设置屏幕分辨率小程序

    integer Fblz:Fblz函数名,integer表示有返回值,类型=整型 。 integer x:数值型形参 integer y:数值型形参 三、Vfp调用举例: Declare integer Fblz In "fBL.dll" integer x,integer y x=800 y=600 xx=...

    HugeInteger

    每个函数的返回值为布尔类型。 函数原型为 boolean operation(HugeInteger) 注意: 1. 大数运算需要考虑到正负,使用单独的变量存储符号位。 2. 大数的输入: 正数形式为”12345”,负数形式为”-123456” 3. 如果...

    Visual Basic中的属性与方法:深入解析对象的两大特性

    Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer Return x + y End Function End Class ``` 在这个例子中,`Calculator` 类包含了一个名为 `Add` 的方法,该方法接受两个整数参数并...

    springboot整合mybatis,接口返回值利用pagehelper实现分页

    在本文中,我们将深入探讨如何在SpringBoot项目中整合MyBatis,并利用PageHelper插件实现接口返回值的分页功能。SpringBoot以其简洁、快速的特性,成为了现代Java开发中的首选框架,而MyBatis作为轻量级的持久层框架...

    检测函数返回值类型的简单程序.rar

    在Java编程语言中,函数是实现特定功能的代码块,它们可以接受参数并返回值。在Java中,每个函数都有一个预定义的返回类型,它决定了函数执行后能够返回的数据类型。这个压缩包"检测函数返回值类型的简单程序.rar...

    vb.net 代码

    函数返回值,而Sub不返回。例如: ```vbnet Function AddNumbers(a As Integer, b As Integer) As Integer Return a + b End Function Sub DisplayMessage(message As String) Console.WriteLine(message) ...

    精彩编程与编程技巧-一组VB实用小程序...

    - **返回值:** - `DRIVE_REMOVEABLE`: 可移动驱动器(如软盘驱动器)。 - `DRIVE_FIXED`: 固定驱动器(如硬盘驱动器)。 - `DRIVE_REMOTE`: 网络驱动器。 #### 三、居中窗口 **知识点:** 居中窗口,使窗体在...

    用JDBC操作Oracle的存储过程返回值

    // 假设第一个参数是返回值,类型为INTEGER ``` 5. **执行存储过程**:调用`CallableStatement`的`execute()`方法执行存储过程: ```java cs.execute(); ``` 6. **获取返回值**:对于输出参数,执行后可以从`...

    04.使用CXF处理JavaBean式的复合类型和List集合类型的形参和返回值

    在本文中,我们将深入探讨如何使用Apache CXF框架来处理JavaBean式的复合类型以及List集合类型的参数和返回值。CXF是一个开源的、强大的Web服务框架,它支持多种Web服务标准,包括SOAP、RESTful等,并且允许开发者以...

    Director COM 串口 插件 功能实现

    integer failNum 返回值为0,表示初始化成功,否则为失败 示例: xCom.init(1, 9600) 说明: a、在通常的串口通信中,还有数据位、停止位、奇偶校验位、电平控制等设置,为了简化应用,本Xtra默认设置为8位数据位...

Global site tag (gtag.js) - Google Analytics