邵阳市住房和城乡建设局网站,住房和城乡建设部网站施工员证,php黄页系统,网站建设科技有限公司基本数据类型#xff08;轻点#xff09; Java基本数据类型在内存中占用固定的大小#xff0c;并且直接存储值#xff0c;而不是对象的引用
整数类型
byte#xff1a;8位#xff0c;存储范围从-128到127
short#xff1a;16位#xff0c;存储范围从-32,768到32,767 …基本数据类型轻点 Java基本数据类型在内存中占用固定的大小并且直接存储值而不是对象的引用
整数类型
byte8位存储范围从-128到127
short16位存储范围从-32,768到32,767
int32位存储范围从-231-1即-2,147,483,648到2,147,483,647。这是最常用的整数类型
long64位存储范围从-263-1。在数值后面加上L或l表示这是一个long类型的值
浮点类型
float32位单精度浮点数。在数值后面加上F或f表示这是一个float类型的值
double64位双精度浮点数。这是最常用的浮点数类型
字符类型
char16位存储Unicode字符。字符字面量用单引号括起来例如A
布尔类型
boolean表示真true或假false
引用数据类型轻点
数组、类、接口
数组是一种可以存储多个相同类型数据的容器它在内存中是连续存储的使用new关键字int[] arr new int[5];表示创建一个长度为5的整型数组。直接初始化int[] arr {1, 2, 3, 4, 5};。
类是Java中定义对象的模板它封装了数据和操作这些数据的方法。类可以包含成员变量属性和成员方法行为。类支持继承、封装和多态等面向对象的特性。类是引用类型通过new关键字创建对象实例对象存储在堆内存中。定义一个类public class Person { String name; int age; }。创建对象实例Person person new Person();。
接口是一种特殊的引用数据类型它定义了一组方法规范但不提供具体实现。接口中的方法默认是public abstract成员变量默认是public static final。从JDK 8开始接口可以包含默认方法和静态方法。接口支持多继承一个类可以实现多个接口。定义接口public interface USB3 { void in(); void out(); }。实现接口public class USBDevice implements USB3 { public void in() { ... } public void out() { ... } }。接口用于定义对象的行为规范允许不同的类实现相同的接口从而实现多态。
包装类的引入中点
对象的基本概念对象是类的实例化是堆内存中的一块内存空间。
在Java编程语言中尽管很多概念都可以被视作对象来处理但基本数据类型本身并不直接对应对象。为了弥补这一不足并使基本数据类型能够像对象一样被操作Java引入了包装类。这些包装类将基本数据类型封装在对象内部从而允许基本数据类型以对象的形式存在和操作
基本数据类型和其对应包装类 如下图所示基本数据类型byte的变量无法指向空值null因为它不是指针类型而是直接存储数据值。相反Byte作为byte的包装类其对象可以指向空值null这证明了包装类Byte并不是基本数据类型而是Java提供的一种将基本数据类型封装为对象的机制 128陷阱重点
128陷阱是Java编程语言中Integer类的一个特有现象具体体现在当进行自动装箱时数值-128到127之间的整数会被缓存并重用而超出此范围的数值则不会下图具体展示了这一陷阱的体现 在创建对象时通常需要为新对象开辟独立的内存空间。然而Java的Integer类的valueOf()方法采用了一种特殊的机制它预先创建并分配了一个包含-128到127范围内所有整数的数组。当使用valueOf()方法为在此范围内的整数赋值时该方法会直接从该数组中取出对应的Integer对象并返回其内存地址供使用从而避免了不必要的内存分配。相反如果赋值的整数超出了这个范围valueOf()方法则会为新的整数值开辟独立的内存空间。这种内存分配方式的具体实现细节如下图所示。在上图中变量a1和a2之所以相等是因为它们都被赋值为-128到127范围内的整数因此valueOf()方法使它们指向了数组中相同的Integer对象地址。而变量a3和a4不相等则是因为它们被赋值为超出该范围的整数值valueOf()方法为它们各自开辟了新的内存空间因此它们指向的是不同的Integer对象地址。 自动拆装箱重点
将基本数据类型int转换为对应的包装类Integer的过程被称为装箱
将包装类Integer转换回基本数据类型int的过程则被称为拆箱 int a 10;
int b 10;
Integer a1 10;
Integer b1 10;
Integer a2 new Integer(10);
Integer b2 new Integer(10);
System.out.println(a b);
//True a和b存储的是相同的整数值且它们都是基本数据类型直接进行值比较相等
System.out.println(a1 b1);
//True 由于128陷阱a1和b1实际上引用的是同一个Integer对象的数组里的相同地址输出True
System.out.println(a2 b2);
//False 通过new关键字显式地创建了两个新的Integer对象a2和b2即使它们的值都是10但它们是两个不同的对象存储在内存中的不同位置
System.out.println(a1 a);
//True 在进行比较时Java会自动将Integer对象a1拆箱为基本数据类型int的值然后与基本数据类型int的变量a进行比较
System.out.println(a1.equals(a));
//True 和上面一样是自动拆箱判断时候Integer要转出int来判断. equals()的底层还是
System.out.println(a1 a2);
//False a1的值10是从catch数据当中获取的 a2的值10是自己创建创建的对象.
System.out.println(a a2);
//True 自动拆箱a2是Integer类型的 a是int类型的判断时候Integer要转出int来判断.