Java数据类型

基本数据类型

Java提供了9种基本数据类型,他们都不具备对象的特性,没有属性和行为。基本数据类型是指不可再分的原子数据类型,内存中直接存储此类型的值,通过内存地址即可直接访问到数据,并且此内存区域只能存放这种类型的值。

Java的9种基本数据类型包括boolean、byte、char、short、int、long、float、double和refvar。前8种数据类型表示生活中的真假、字符、整数和小树,最后一种refvar是面向对象世界中的引用变量,也叫引用句柄。

下表展示了8种基本数据类型的默认值、空间占用大小、表示范围及对应的包装类等信息:

序号类型名称默认值大小最小值最大值包装类缓存区间
1booleanFALSE1B0(false)1(true)Boolean
2byte(byte)01B-128127Byte-128~127
3char\u0000'2B\u0000'\uFFFF'Character(char)0~(char)127
4short(short)02B-2^15(2^15)-1(32767)Short-128~127
5int04B-2^31(2^31)-1Integer-128~127
6long0L8B-2^63(2^63)-1Long-128~127
7float0.0f4B1.4e-453.4e+38Float
8double0.0d8B4.9e-3241.798e+308Double

 

包装类型

Java前8种基本数据类型都有相应的包装类,因为Java的设计理念是一切皆是对象,在很多情况下,需要以对象的形式操作,比如hashCode()获取哈希值,或者getClass()获取类等。

包装类的存在解决了基本数据类型无法做到的事情:泛型类型参数、序列化、类型转换、高频区间数据缓存。

从上表及源码可知,Integer会缓存-128~127 之间的值,对于Integer var = ?在-128~127之间的赋值,Integer对象由IntegerCache.cahce产生,会复用已有对象,这个区间内的Integer值可以直接使==进行判断,但是这个区间之外的所有数据都会在堆上产生,并不会复用已有对象,这是一个大问题。因此,推荐所有包装类对象之间值的比较,全部使用equals()方法。

事实上,除Float和Double之外,其他包装数据类型都会缓存,6个包装类直接赋值时,就是调用对应包装类的静态工厂方法valueOf()。

在JDK9直接把new的构造方法过时,推荐使用valueOf(),合理利用缓存,提升程序性能。各个包装类的缓存区间如下:

  • Boolean:使用静态final变量定义,valueOf()就是返回这两个静态值;
  • Byte:表示范围是-128~127,全部缓存;
  • Short:表示范围是-32768~32767,缓存范围是-128~127;
  • Character:表示范围是0~655335,缓存范围是0~127;
  • Long:表示范围是[-2^63,(2^63)-1],缓存范围是-128~127;
  • Integer:表示范围是[-2^31,(2^31)-1],缓存范围是-128~127.

Integer是Java数据世界里应用最广的数据类型,缓存区间为-128~127。

他是唯一可以修改缓存范围的包装类,在VM Options加入参数-XX:AutoBoxCacheMax=8888,即可设置最大缓存值为8888,

示例代码如下:

package com.htzw.study;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LongIntegerCacheTest {
    public static void main(String[] args){
        Long a = 127L;
        Long b = 127L;
        log.info("Long max cached value is 127,and the result is :"+(a == b));

        Long a1 = 128L;
        Long b1 = 128L;
        log.info("Long =128 cache is :"+(a1 == b1));

        Long c= -128L;
        Long d = -128L;
        log.info("Long min cached value is -128,and the result is :"+(c == d));

        Long c1= -129L;
        Long d1 = -129L;
        log.info("Long = -129 cached is :"+(c1 == d1));

        // Long类型只缓存-128~127之间的数据
        Long e = 1000L;
        Long f = 1000L;
        log.info("Long = 1000 cached is :"+(e == f));

        // JVM AutoBoxCacheMax只对Integer对象有效
        Integer x = 1001;
        Integer y = 1001;
        log.info("Integer = 1001 is {}",(x == y));
    }
}

执行结果如下所示:

22:39:48.339 [main] INFO com.htzw.study.LongIntegerCacheTest - Long max cached value is 127,and the result is :true
22:39:48.339 [main] INFO com.htzw.study.LongIntegerCacheTest - Long =128 cache is :false
22:39:48.339 [main] INFO com.htzw.study.LongIntegerCacheTest - Long min cached value is -128,and the result is :true
22:39:48.339 [main] INFO com.htzw.study.LongIntegerCacheTest - Long = -129 cached is :false
22:39:48.339 [main] INFO com.htzw.study.LongIntegerCacheTest - Long = 1000 cached is :false
22:39:48.354 [main] INFO com.htzw.study.LongIntegerCacheTest - Integer = 1001 is true

该例说明了Long只是缓存了-128~127之间的数值,而1000L没有被缓存,在将Integer最大缓存值改为8888后,1001被成功缓存。

在选择使用包装类还是基本数据类型,推荐使用如下方式:

(1)所有的POJO类属性必须使用包装数据类型 ;

(2)RPC方法的返回值和参数必须使用包装数据类型;

(3)所有的局部变量推荐使用基本数据类型。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种面向对象的程序设计语言,有许多内置的数据类型供开发者使用。这些数据类型可以帮助我们在程序中定义不同类型的变量,并对这些变量进行操作和处理。 Java数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型包括整型、浮点型、字符型和布尔型,用于存储简单的数据值。引用数据类型则是指对象类型,用于存储复杂的数据结构。 在进行Java数据类型实验时,可以通过创建不同类型的变量来演示它们的特性和用法。例如,可以创建一个整型变量来存储一个整数值,使用运算符对其进行加减乘除等运算,并将结果输出到控制台上。 另外,也可以尝试使用浮点型数据类型来储存实数值,对其进行各种算术运算,以及比较大小、取整等操作。字符型数据类型可以用来存储单个字符,例如创建一个字符变量来表示一个字母,使用各种字符相关的方法对其进行处理。 布尔型数据类型则用于存储逻辑值,即真或假。可以通过创建一个布尔变量,并使用逻辑运算符对其进行逻辑判断,以及进行条件语句的控制。 此外,还可以进行引用数据类型的实验,例如创建一个字符串对象,使用字符串类的各种方法对其进行处理。还可以创建一个自定义的类,例如创建一个学生类,定义各种属性和方法,实验对象的创建、属性的访问和方法的调用。 总之,Java数据类型实验可以帮助我们深入了解不同类型数据在程序中的存储和处理方式,从而更好地应用和扩展Java语言的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值