zoukankan      html  css  js  c++  java
  • Integeter127与128

     1 package com.hangao.basic;
     2 
     3 /**
     4  * @author hangao hangao1204@hotmail.com
     5  *
     6  */
     7 public class TestInt {
     8     public static void main(String[] args) {
     9         Integer ie1 = 127;
    10         Integer ie2 = 127;
    11         System.out.println("Integer 127==127:" + (ie1 == ie2));//Integer 127==127:true
    12         
    13         Integer ie3 = new Integer(127);
    14         Integer ie4 = new Integer(127);
    15         System.out.println("new Integer 127==127:" + (ie3 == ie4));//new Integer 127==127:false
    16         
    17         Integer ie5 = 128;
    18         Integer ie6 = 128;
    19         System.out.println("Integer 128==128:" + (ie5 == ie6));//Integer 128==128:false
    20         
    21         Integer ie7 = new Integer(128);
    22         Integer ie8 = new Integer(128);
    23         System.out.println("new Integer 128==128:" + (ie7 == ie8));//new Integer 128==128:false
    24         
    25         analysis();
    26     }
    27 
    28     private static void analysis() {
    29         Integer ie0 = 127;
    30         System.out.println(ie0);
    31         /* L0
    32         LINENUMBER 5 L0
    33         BIPUSH 127
    34         INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;
    35         ASTORE 1*/
    36         /*从字节码文件可以看出此处有一个自动装箱的动作*/
    37         
    38         /*public static Integer valueOf(int i) {
    39             if (i >= IntegerCache.low && i <= IntegerCache.high)
    40                 return IntegerCache.cache[i + (-IntegerCache.low)];
    41             return new Integer(i);
    42         }*/
    43         /*而Integeter这个类的装箱过程从Integeter源代码可以看出在(-128 - 127)之间的int值
    44         其实返回的是IntegerCache里面的cache[]数组里面的对象*/
    45         
    46         /*private static class IntegerCache {
    47             static final int low = -128;
    48             static final int high;
    49             static final Integer cache[];
    50 
    51             static {
    52                 // high value may be configured by property
    53                 int h = 127;
    54                 String integerCacheHighPropValue =
    55                     sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
    56                 if (integerCacheHighPropValue != null) {
    57                     try {
    58                         int i = Integer.parseInt(integerCacheHighPropValue);
    59                         i = Math.max(i, 127);
    60                         // Maximum array size is Integer.MAX_VALUE
    61                         h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
    62                     } catch( NumberFormatException nfe) {
    63                         // If the property cannot be parsed into an int, ignore it.
    64                     }
    65                 }
    66                 high = h;
    67 
    68                 cache = new Integer[(high - low) + 1];
    69                 int j = low;
    70                 for(int k = 0; k < cache.length; k++)
    71                     cache[k] = new Integer(j++);
    72 
    73                 // range [-128, 127] must be interned (JLS7 5.1.7)
    74                 assert IntegerCache.high >= 127;
    75             }
    76 
    77             private IntegerCache() {}
    78         }*/
    79         /*IntegerCache是Integer的内部类,在被jdk加载的时候,会去初始化创建(-128 - 127)之间所有int值对应的Integer类数组
    80         使用的时候可以从里面取*/
    81     }
    82 }
  • 相关阅读:
    mybatis返回map类型数据空值字段不显示(三种解决方法)
    linux各种资源查看
    ssh代理
    python 自定义ping编写
    python 备忘(协程,多进程)
    python 控制电源模块for循环写法
    XPath 语法
    python 自定义去掉特殊字符串
    ssh证书登陆vpc/并且反向代理
    cmder设置
  • 原文地址:https://www.cnblogs.com/hangao/p/6062241.html
Copyright © 2011-2022 走看看