首页 > 其他分享 >8 种基本类型的包装类和常量池

8 种基本类型的包装类和常量池

时间:2024-01-24 23:11:38浏览次数:29  
标签:常量 包装 i2 i5 i4 40 i1 类型 Integer

  • Java 基本类型的包装类的大部分都实现了常量池技术, 即Byte,Short,Integer,Long,Character,Boolean; 这 5 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据, 但是超出此范围仍然会去创建新的对象。
  • 两种浮点数类型的包装类 Float , Double 并没有实现常量池技术

valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。

Integer 的部分源码:

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

在 Java 8 中,Integer 缓存池的大小默认为 -128~127。

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) {
        try {
            int i = parseInt(integerCacheHighPropValue);
            i = Math.max(i, 127);
            // Maximum array size is Integer.MAX_VALUE
            h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
        } catch( NumberFormatException nfe) {
            // If the property cannot be parsed into an int, ignore it.
        }
    }
    high = h;

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

    // range [-128, 127] must be interned (JLS7 5.1.7)
    assert IntegerCache.high >= 127;
}
  • 示例1:
Integer i1=40;
//Java 在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40);从而使用常量池中的对象。
Integer i2 = new Integer(40);
//创建新的对象。
System.out.println(i1==i2);//输出false
  • 示例2:Integer有自动拆装箱功能
Integer i1 = 40;
Integer i2 = 40;
Integer i3 = 0;
Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);
  
System.out.println("i1=i2   " + (i1 == i2)); //输出 i1=i2  true
System.out.println("i1=i2+i3   " + (i1 == i2 + i3)); //输出 i1=i2+i3  true
//i2+i3得到40,比较的是数值
System.out.println("i1=i4   " + (i1 == i4)); //输出 i1=i4 false
System.out.println("i4=i5   " + (i4 == i5)); //输出 i4=i5 false
//i5+i6得到40,比较的是数值
System.out.println("i4=i5+i6   " + (i4 == i5 + i6)); //输出 i4=i5+i6 true
System.out.println("40=i5+i6   " + (40 == i5 + i6)); //输出 40=i5+i6 true    

参考:

标签:常量,包装,i2,i5,i4,40,i1,类型,Integer
From: https://www.cnblogs.com/i9code/p/17986079

相关文章

  • 无涯教程-Rust - 数据类型
    Rust是一种静态类型的语言,Rust中的每个值都需要指定某种数据类型,编译器也可以根据分配给它的值自动推断变量的数据类型。声明变量使用let关键字声明一个变量。fnmain(){letcompany_string="LearnFk";//字符串类型letrating_float=4.5;//浮......
  • 6. 结构体和自定义类型
    结构体与自定义类型结构体:将相关的数据放置在一起可以通过点操作符(.)访问内部元素可以作为函数的输入参数或返回类型一个简单的代码示例://self-defineddatatype--struct#include<iostream>structPoint{intx;inty;};//PointvoidprintPoint(Poi......
  • OCaml入门-类型
    OCaml有如下基本类型OCamltypeRangeint63-bitsignedinton64-bitprocessors,or31-bitsignedinton32-bitprocessorsfloatIEEEdouble-precisionfloatingpoint,equivalenttoC'sdoubleboolAboolean,writteneither......
  • Oracle数据类型的简单学习之一
    Oracle数据类型的简单学习之一背景因为信创安可替代的发展有很多项目提到了数据库切换到国产数据库的要求.一般情况是要求从Oracle/SQLServer迁移到国产的:达梦/瀚高/人大金仓/南大通用等数据库.但是因为Oracle作为数据库领域No.1的存在他对SQL的规范标准支持的并不......
  • 获取猜你喜欢数据,类型定义和列表渲染
    1.封装获取猜你喜欢数据API2.组件挂载完毕调用API这个是接口文档:  下面: 组件内部获取数据,我们其他的都是在index.vue里面获取的: 我们来看一下数据,可以看到数据很多(items商品信息): 定义数据类型: 这里的分页我们其他地方也会用到,因此我们把他定义成一个通用的类......
  • 基于信号功率谱特征和GRNN广义回归神经网络的信号调制类型识别算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本MATLAB2022a 3.算法理论概述       本课题,我们主要对MPSK和MFSK调制类型进行识别。在进行信号调制方式区分之前,首先需要对PSK和FSK进行区分,提出了一种基于信号功率谱的PSK和FSK调制方式的识别方法。信号的功率谱计算过程......
  • rocketmq--中的7种消息类型
    RocketMQ支持多种消息类型,每种类型都适用于不同的业务场景。下面是一些常见的消息类型及其特点:普通消息(NormalMessage):这是最基本的消息类型,没有任何特殊属性。生产者发送消息到指定的主题,消费者从主题订阅并消费这些消息。普通消息不保证严格的顺序。顺序消息(OrderedM......
  • C++U5-第03课-深度优先搜索3-连通块类型
    学习目标 本节课主要学习一种类型的深度优先搜索-连通块  [数水坑]  【思路分析】相连的水坑可以被认为是一个水坑,求水坑的个数,就是求连通块的个数。可以采用搜索来访问每个点。每访问到一个W表示至少有一个水坑,通过搜索8个方向,得到这个点连通的所有的......
  • 在IIS中添加7z MIME 类型
    在InternetInformationServices(IIS)中添加7zMIME类型,允许服务器识别和正确处理.7z文件。下面是如何在IIS中添加7zMIME类型的步骤:打开IIS管理器:点击“开始”按钮,打开“运行”,输入inetmgr,然后按回车键,或者通过控制面板中的“管理工具”来启动IIS管理器。选择你要配置......
  • js Attr类型
    <ulid="myList"></ul>假设想给这个元素添加3个列表项。如果分3次给这个元素添加列表项,浏览器就要重新渲染3次页面,以反映新添加的内容。为避免多次渲染,下面的代码示例使用文档片段创建了所有列表项,然后一次性将它们添加到了元素:letfragment=document.createDocumentFra......