14.java 基本数据类型的包装类
栏目: Objective-C · 发布时间: 6年前
内容简介:java在设计之初,有一个基本原则:一切皆对象。但是基本数据类型不是对象,不具备“对象”的特性——不携带属性、没有方法可调用。为了解决此类问题,Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes).每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变.包装类虽然都是object的子类,但严格来说又可分为两种:
概念
java在设计之初,有一个基本原则:一切皆对象。但是基本数据类型不是对象,不具备“对象”的特性——不携带属性、没有方法可调用。为了解决此类问题,Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes).
基本数据类型及对应的包装类
| 基本数据类型 | 对应的包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变.
包装类虽然都是object的子类,但严格来说又可分为两种:
- 对象包装类(object直接子类):Character、Boolean
- 数值包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double
Number继承了Object类,是一个抽象类。里面定义了六个抽象方法:byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()。
数据的装箱与拆箱
基本类型和对应的包装类可以相互装换:
- 由基本类型向对应的包装类转换称为 装箱 ,例如把 int 包装成 Integer 类的对象;
- 包装类向对应的基本类型转换称为 拆箱 ,例如把 Integer 类的对象重新简化为 int;
示例:
public class testDemo {
public static void main(String[] args) {
int m = 500;
Integer obj = new Integer(m); // 手动装箱
int n = obj.intValue(); // 手动拆箱
System.out.println("n = " + n);
Integer obj1 = new Integer(500);
System.out.println("obj 等价于 obj1?" + obj.equals(obj1));
}
}
输出结果:
n = 500
obj 等价于 obj1?true
自动拆箱和装箱
上面的例子都需要手动实例化一个包装类,称为手动拆箱、装箱。Java 1.5 之前必须手动拆箱装箱。
Java 1.5 之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,并且可以直接利用包装类进行数学计算。
示例:
public class testDemo {
public static void main(String[] args) {
Integer obj = 10; // 自动装箱
int n = obj; // 自动拆箱
System.out.println("n = " + n);
System.out.println(obj * 2); //包装类直接进行数学计算。
Integer obj1 = 10;
System.out.println("obj 等价于 obj1?" + obj.equals(obj1));
}
}
输出结果:
n = 10
20
obj 等价于 obj1?true
由于存在自动装箱,那么object可以接收一切数据类型了,包括基本数据类型。
流程:基本数据类型--> 自动装箱--> 向上转型为object
但object类型不能直接转为基本数据类型,要先转为对应的包装类,然后自动拆箱。
手动装箱与自动装箱的区别
手动装箱与自动装箱与String两种实例化方式的区别是一样的。
自动装箱(即直接赋值)将会比使用构造方法的方式节省一块堆内存空间,并自动入对象池。而手动装箱(使用构造方法)会产生两块堆内存,而且不会保存在对象池中。
但是和String不同的是包装对象没有intern()方法,无法手动入池。
示例:
public class testDemo {
public static void main(String[] args) {
Integer obja = 10;//直接赋值,自动装箱
Integer objb = 10; //直接赋值,自动装箱
Integer objc = new Integer(10); //手动装箱
System.out.println(obja == objb);
System.out.println(obja == objc);
System.out.println(objb == objc);
System.out.println(obja.equals(objc));
}
}
输出结果:
true
false
false
true
数据类型的转换
包装类提供了基本数据类型和String类型相互转换的功能。
将 String 转为基本数据类型
Integer类: public static int parseInt(String s) Double类: public static double parseDouble(String s) Boolean类: public static boolean parseBoolean(String s) .....
需要注意的是 Character 类里面并不存在将字符串变为字符的方法,因为String类有一个charAt()的方法,可以根据索引取出字符。
基本数据类型转为String
有两种方式:
- 任何基本数据类型与字符串使用了"+"操作之后都将转为String类型。
- 在String类中定义有valueOf()方法,该方法可以接收所有的基本数据类型。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 一分钟理解 Java 包装类型
- JS中数据类型、内置对象、包装类型对象、typeof关系
- 有个原则就是实体类还是controller入参都应该是 包装类型
- Reactor-Guice 0.0.9 发布 ,支持返回 byte[] 类型,去掉默认JSON包装
- Reactor-Guice 0.0.9 发布 ,支持返回 byte[] 类型,去掉默认JSON包装
- JAXB编译器是绑定xs:boolean到Java Boolean包装器类,而不是布尔基本类型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Masterminds of Programming
Federico Biancuzzi、Chromatic / O'Reilly Media / 2009-03-27 / USD 39.99
Description Masterminds of Programming features exclusive interviews with the creators of several historic and highly influential programming languages. Think along with Adin D. Falkoff (APL), Jame......一起来看看 《Masterminds of Programming》 这本书的介绍吧!