全面解析Java数据类型

📚 目录


🔍 数据类型概述

Java语言数据类型分为两大类:

 

Java数据类型

基本类型

引用类型

数值型

非数值型

整数类型

浮点类型

byte,short,int,long

float,double

char,boolean

类,接口,数组,枚举,字符串等


📌 8大基本数据类型详解

全面参数对照表

数据类型位数字节默认值最小值最大值包装类
byte810-128127Byte
short1620-3276832767Short
int3240-2^312^31-1Integer
long6480L-2^632^63-1Long
float3240.0f1.4E-453.4028235E38Float
double6480.0d4.9E-3241.7976931348623157E308Double
char162'\u0000'065535Character
boolean1*-false--Boolean

*注:boolean的存储长度依赖于JVM实现


🎁 自动装箱与拆箱

自动转换原理

// 装箱:基本类型 -> 包装类
Integer a = 100;  // 实际执行:Integer.valueOf(100)
​
// 拆箱:包装类 -> 基本类型
int b = a;        // 实际执行:a.intValue()

缓存机制揭秘

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); // true(使用缓存)
​
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4); // false(新建对象)

🔄 类型转换规则

自动类型提升金字塔

byte → short → int → long → float → double
          ↑
         char

强制转换风险示例

double d = 100.04;
long l = (long)d;         // 正确,得到100
int i = (int)l;           // 正确,得到100
​
double bigD = 1.7e308;
float f = (float)bigD;    // 溢出为无限大

💾 内存分配机制

  • 基本类型:直接存储在栈内存(局部变量)或堆内存(作为对象成员)

  • 引用类型:对象实体在堆,引用变量在栈

  • 常量池:存储编译期确定的字面量


🧰 包装类深度解析

源码关键点

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

特殊值处理

Double.NaN    // 非数字
Double.POSITIVE_INFINITY  // 正无穷
Double.NEGATIVE_INFINITY  // 负无穷

🚀 JDK新特性

1. var类型推断(JDK10+)

var list = new ArrayList<String>();  // 自动推断为ArrayList<String>
var stream = list.stream();          // 推断为Stream<String>

2. switch表达式类型匹配(JDK17预览)

Object obj = 3.14;
String desc = switch(obj) {
    case Integer i -> "整数: " + i;
    case Double d  -> "小数: " + d;
    default        -> "未知类型";
};

⚠️ 常见数值陷阱

1. 浮点数精度丢失

System.out.println(0.1 + 0.2);  // 0.30000000000000004

2. 整数溢出

int max = Integer.MAX_VALUE;
System.out.println(max + 1);  // -2147483648

🏆 最佳实践指南

  1. 数值计算准则

    • 财务计算使用BigDecimal

    • 超过long范围用BigInteger

    • 优先使用基本类型提升性能

  2. 类型选择策略

     

    需要精确计算

    BigDecimal

    整数运算

    不超过127用byte

    常用数值用int

    大数值用long

  3. 性能优化技巧

    // 预先计算常用值
    static final Integer[] cache = new Integer[256];
    static {
        for(int i=0; i<256; i++) cache[i] = i;
    }
     
    // 批量操作避免自动装箱
    int sum = 0;
    List<Integer> list = /* ... */;
    for(Integer num : list) {
        sum += num;  // 每次拆箱降低性能
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值