基本数据类型和引用数据类型

📅 发布时间:2026/7/28 11:14:07
基本数据类型和引用数据类型 目录一、基本数据类型二、包装类1.对象缓存机制2.equals()和区别三、接口和抽象类一、基本数据类型1.基本数据类型只有8种小写格式整数类型long、int、short、byte浮点类型float、double字符类型char布尔类型boolean基本数据类型的局部变量存储在线程对应的栈中基本数据类型的**成员变量非static存放在JVM的堆也就是对象内存空间**中。为什么正数最大值比负数少了1因为计算机使用补码表示有符号整数最高位表示符号位最大的正数就是0111 1111127。注意浮点类型的范围由指数决定位数由尾数决定有整数和小数。long类型的数据一定要在数值后面加上L否则将作为整型解析。float类型的数据一定要在数值后面加上f或F否则将无法通过编译。long类型超过最大精度使用BigInteger代替内部使用int[]数组来存储任意大小的整形数据。二、包装类基本类型的包装类属于引用类型可用于泛型存储在JVM的堆中默认值为null。valueOf()将基本类型转换为包装类对象装箱xxxValue()将包装类对象转换为基本类型拆箱1.对象缓存机制Byte,Short,Integer,Long这4种包装类默认创建了数值[-128127]的相应类型的对象Character创建了数值在[0,127]范围的对象当我们使用valueOf()装箱自动装箱也是默认调用这个方法来创建这些包装类对象时如果值在缓存范围内那么会返回缓存中的对象而不是新建一个对象。例如Integer i40、Integer iInteger.valueOf(40)publicstaticIntegervalueOf(inti){if(iIntegerCache.lowiIntegerCache.high)returnIntegerCache.cache[i(-IntegerCache.low)];returnnewInteger(i);}privatestaticclassIntegerCache{staticfinalintlow-128;staticfinalinthigh;static{// high value may be configured by propertyinth127;}}如果不想使用缓存对象那么就要基于构造方法Integer i new Integer(40)创建包装类对象。2.equals()和区别对于基本数据类型局部变量、成员变量比较的是值对于包装类比较的是堆上的内存地址因为引用存的值是对象的地址。Object类的equal()方法就是执行所以对于包装类需要重写equals()方法来比较两个对象中的属性是否相等所以equals()前要避免引用指向空不然会报空指针异常。String 中的equals()方法是被重写过的。三、接口和抽象类接口用来定义规范一个类可以实现多个接口。适合只提取规范且接口与类是多对多关系时。多对一没必要提接口直接写类就行publicinterfaceAnimal{// 常量intLEGS4;// 抽象方法voideat();// 默认方法defaultvoidbreath(){System.out.println(呼吸);}}抽象类用来定义模版有成员变量、构造方法、普通方法一个类只能集成一个抽象类。适合提取重复代码且抽象类与类是一对多关系时。一对一没必要提抽象类直接写类就行publicabstractclassAnimal{// 普通成员变量Stringname;// 构造方法publicAnimal(Stringname){this.namename;}// 抽象方法publicabstractvoideat();// 普通方法publicvoidsleep(){System.out.println(睡觉);}}