基本数据类型与包装类

目录

基本数据类型

Number类

缓存区间

包装类的共性

数据类型转换


基本数据类型

序号类型名称默认值大小最小值最大值包装类缓冲区间
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^152^15 - 1Short-128 ~ 127
5int04B-2^312^31 - 1Integer-128 ~ 127
6long0L8B-2^632^63 - 1Long-128 ~ 127
7float0.0f4B1.4e-45 (1.4 * 10^-45)3.4e+38 (3.4 * 10^38)Float
8double0.0d8B4.9e-324(4.9 * 10^-324)1.798e+308(1.798 * 10^308)Double无 

Number类

在包装类中Byte、Short、Integer、Long、Float、Double都继承了抽象类Number。

public abstract class Number implements java.io.Serializable {
    public abstract int intValue();
    public abstract int longValue();
    public abstract int floatValue();
    public abstract int doubleValue();
    public byte byteValue() {
        return (byte)intValue();
    }
    public short shortValue() {
        return (short)intValue();
    }
}

缓存区间

整数类型Byte、Short、Integer、Long都有对应的缓存操作,缓存范围都是-128 ~ 127,通过内部类实现。

    private static class ByteCache {
        private ByteCache(){}

        static final Byte cache[] = new Byte[-(-128) + 127 + 1];

        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Byte((byte)(i - 128));
        }
    }

经典例子:

    public static void main(String[] args) {
        Integer a1 = 1;
        Integer a2 = 1;
        Integer b1 = 128;
        Integer b2 = 128;
        System.out.println(a1 == a2); // true
        System.out.println(b1 == b2); // false

    }

Integer是应用最广泛的数据类型之一,它是唯一可以修改缓存范围的包装类,在VM options加入参数 -XX:AutoBoxCacheMax=666,即可以设置最大缓存值666。

包装类的共性

1. 具有基本数值作为参数的构造函数。例如:Integer i = new Integer(66);

2. 具有字符串作为参数的构造函数。例如Integer i = new Integer("-12");如果字符串内容与当前包装类型不匹配,会抛出NumberFormatException异常,例如Integer i = new Integer("-12.5");

3. 具有返回对象基本值的typeValue方法,例如int num = i.intValue();

4. 具有将字符串转换为基本值的parseType方法,例如int num = Integer.parseInt("56");

5. 所有包装类都覆写了hashCode与equals方法,以提供对Map的支持。

6. equals方法用于比较同一类型两个对象的值是否相等,不要使用"=="。

7. 具有将值转成字符串的方法toString()方法。

8. 都支持自动装箱与拆箱,大大方便了基本数据类型与它们包装类的使用。 

数据类型转换

1. 自动类型转换:把某种基本类型的值直接赋给另一种基本类型的变量。

2. 强制类型转换:把数范围大的类型转换为表数范围小的类型。需要注意,由于是从大范围强转到小范围,容易引起信息丢失,例如:

int a = (int) 2.26d;  // 2

int b = (int)1000000000000L; // -727379968

从左到右自动转换,从右到左需要强制转换

3. 自动提升规则:当一个算术表达式中包含多个基本类型的值时,所有的byte、short和char类型会被提升到int类型。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@从入门到入土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值