Java基础之基础数据类型包装类

本文详细介绍了Java中八种基本数据类型及其对应的包装类,包括装箱、拆箱操作,以及如何通过包装类将字符串转换为基本数据类型。同时,文章探讨了享元模式在减少内存使用方面的应用,并通过实例演示了Integer类在不同情况下的比较行为。

在Java中有一个设计的原则“一切皆对象”,Java中的基本数据类型就完全不符合这种设计思想,因为八种基本数据类型并不是引用数据类型,所以Java中为了解决这样的问题,JDK1.5以后引入了八种基本数据类型的包装类。

八种包装类分为两大类型:
Number:Integer、Short、Long、Double、Float、Byte都是Number的子 类表示是一个数字。
Object:Character、Boolean都是Object的直接子类。

在这里插入图片描述

装箱及拆箱操作

将一个基本数据类型转换为包装类,那么这样的操作称为装箱操作。将一个包装类转换为一个基本数据类型,这样的操作称为拆箱操作。
在这里插入图片描述

转型操作

在包装类中,可以将一个字符串变为指定的基本数据类型,一般在输入数据时会使用较多。
在Integer类中将String变为int型数据:public static int parseInt(String s)
在Float类中将String变为float型数据:public static float parseFloat(String s)

注意:转型操作时,字符串必须由数字组成,否则会出现错误哦
享元模式(Flyweight Pattern)它使用共享对象,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似对象;它适合用于当大量对象只是重复因而导致无法令人接受的使用大量内存。通常对象中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。
运用共享技术有效的支持大量细粒度的对象。

/**
	基本数据类型包装类
*/
public class Test16{

	public static void main(String[] args){
	
		//把基本数据类型转换为包装类,称为自动装箱
		Integer i1 = new Integer(10);
		//把包装类转换为基本数据类型,称为自动拆箱
		int i2 = i1.intValue();
		
		Integer i3 = 10; //建议方式
		
		Integer i4 = new Integer("123");
		
		//把数值字符串转换为int类型
		String num1 = "12";
		int i5 = Integer.parseInt(num1);
		
		int i6 = Integer.valueOf(num1);
		
		
		//面试题:
		Integer x1 = new Integer(10);
		Integer x2 = new Integer(10);
		System.out.println(x1==x2);  //flase
		System.out.println(x1.equals(x2)); //true
		
		Integer x3 = new Integer(128);
		Integer x4 = new Integer(128);
		System.out.println(x3==x4); //flase
		System.out.println(x3.equals(x4)); //true
		
		Integer x5 = 10;
		Integer x6 = 10;
		System.out.println(x5==x6); //true
		System.out.println(x5.equals(x6)); //true
		
		Integer x7 = 128;
		Integer x8 = 128;
		System.out.println(x7==x8); //flase
		System.out.println(x7.equals(x8)); //true
	}
}

因为jar包里的lang包里的Integer类的IntegerCache方法存的最大数就是128以内的 即最大就一个字节 超过一个字节不缓存了
一个字节以内的数认为是常用的量做一个缓存 即例子中10 缓存下来 即x5 x6使用的是缓存里的同一个10
在这里插入图片描述

### Java 中的基础数据类型包装 Java 提供了八种基本数据类型,这些型不是对象而是原始值。为了支持面向对象特性并提供更丰富的功能,每种基本数据类型都有相应的包装。 #### 基本数据类型及其特点 - `byte`:8位带符号整数,范围是从 -128 到 127。 - `short`:16位带符号整数,范围更大一些[-32,768 至 32,767]。 - `int`:最常用的32位带符号整数,适用于大多数场景下的数值计算[^1]。 - `long`:64位带符号整数,当需要表示非常大或很小的整数值时使用。 - `float`:单精度浮点数,占用32位存储空间,在科学计算等领域应用广泛。 - `double`:双精度浮点数,默认情况下用于表达实数,具有更高的精确度和更大的取值范围。 - `boolean`:逻辑型变量,只有两个可能的值true 或 false。 - `char`:字符型,采用Unicode编码方案来定义字符集,每个字符占16位内存大小[^2]。 #### 对应的包装概述 对于上述提到的基本数据类型Java 设计了专门的包装以便于操作: | **基本数据类型** | **对应的包装** | |------------------|----------------| | byte | Byte | | short | Short | | int | Integer | | long | Long | | float | Float | | double | Double | | boolean | Boolean | | char | Character | 通过这种方式,可以将任何一种基本数据类型的实例转换成对象形式处理,从而更好地遵循“万物皆为对象”的理念[^3]。 下面是一个简单的例子展示如何创建不同型的包装对象以及自动装箱拆箱机制的应用: ```java // 创建包装对象的方式之一 Integer numObj = new Integer(10); // 自动装箱 (autoboxing): 将基本型自动转化为相应包装型 Integer autoBoxedNum = 20; // 自动拆箱 (unboxing): 反向过程,即把包装器转回基本型 int unboxedValue = autoBoxedNum; ``` 值得注意的是,自JDK 5.0起引入了自动装箱/拆箱的功能,使得开发者可以在很多场合下省去显式的new语句而直接赋值给包装引用变量[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值