廖雪峰Java2面向对象编程-6Java核心类-3包装类型
Java的数据类型:
- 基本类型:int boolean float
- 引用类型:所有class类型

为一个基本类型int赋值为null,会提示“incompatible types”错误。
错误原始:基本类型是不能视为对象(引用类型)的.。
可以定义一个Integer类,包含一个实例字段int。这样可以把Integer视为int的包装类型wrapper。
包装类型本身是引用类型,只是其内部持有一个基本类型的变量。
JDK为每种基本类型都创建了对应的包装类型:
| 基本类型 | 对应的引用类型 |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
使用JDK的Integer类传入null,语句不会再报错,只是执行时会抛出java.lang.NumberFormatException
Integer n = new Integer(null);
int i = n;
System.out.println(i);

类型转换
int i = 100;
//把int、String转换为Integer
Integer n1 = new Integer(i);
Integer n2 = Integer.valueOf(i);
Integer n3 = Integer.valueOf("100");
//把Integer、String转换为int类型
int x1 = n1.intValue();
int x3 = Integer.parseInt("100");
//把Integer、int转换为String类型
String s1 = n1.toString();
String s2 = String.valueOf(i);
自动拆箱和自动装箱
编译器何以自动在int和Integer之间转型。
- 自动装箱auto boxing int -> Integer
Integer n = 99;//自动调用Integer.valueOf(99)
- 自动拆箱auto unboxing Integer -> int
int i = n;//n.intValue()
注意:
* 自动装箱和自动拆箱只发生在编译阶段
* 装箱和拆箱会影响执行效率
* 编译后的class代码是严格区分基本类型和引用类型的,没有自动装箱和拆箱
* Integer的null->int执行时会抛出<font color=#FF0000>java.lang.NumberFormatException</font>
包装类型定义了一些有用的静态变量
```#java
Boolean t = Boolean.TRUE;
Boolean f = Boolean.FALSE;
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
int sizeOfLong = Long.SIZE;
int bytesOfLong = Long.BYTES;
Java的包装类型全部继承自Number这个class。可以利用向上转型,把任意一种包装类型先变为Number对象,利用Number提供的Byte、Integer、Float变为任意的类型。
Integer n = 5 + Integer.valueOf(10);
Number m = n;
System.out.println(m.floatValue());//15.0
总结:
JDK的包装类型可以把基本类型包装为class
自动装箱和自动拆箱是编译器完成的 (JDK>= 1.5)
装箱和拆箱会影响执行效率
注意拆箱时kennel发生NullPointException
廖雪峰Java2面向对象编程-6Java核心类-3包装类型的更多相关文章
- 廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder
字符串操作过程中,每次用 + 拼接字符串,有以下问题: 每次循环都会创建新的对象 绝大部分都是临时对象.浪费内存 影响GC效率 String s = ""; for(int i=0 ...
- 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码
Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...
- 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类
1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...
- 廖雪峰Java2面向对象编程-6Java核心类-5枚举类
直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...
- 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean
1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...
- 廖雪峰Java2面向对象编程-3继承和多态-1继承
1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...
- 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础
1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...
- 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar
1.classpath 1.1classpath定义 classpath是一个环境变量 classpath指示JVM如何搜索class classpath设置的搜索路径与操作系统相关 * window ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-2接口
1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...
随机推荐
- js-自加和自减
i++ 返回的是自增之前的值 先利用再加 ++i 返回的是自增之后的值 先加再利用
- EasyUI datagrid easyui datagrid +dialog 加载 可直接运行 七
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
- Python知识点整理,基础3 - 字典操作
- 【BZOJ4300】 绝世好题
傻逼题都不能一眼看出思路…… 原题: 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). n<=100000,ai&l ...
- django+uwsgi+nginx数据表过大引起"out of memory for query result"
昨天负责的一个项目突然爆“out of memory for query result”. 背景 项目的数据表是保存超过10m的文本数据,通过json方式保存进postgres中,上传一个13m的大文 ...
- 原生js实现ajax用于简单的签到或登录
<script> function createStandardXHR() { try { return new window.XMLHttpRequest(); ...
- NPOI之Excel——设置单元格背景色
NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillP ...
- Javascript 中 的 for ... in 和 for ... of 差别
Javascript 中 的 for ... in 和 for ... of 差别 for ... in 是历史问题,在循环数据时会可以出现奇怪的问题,比如把数据的属性循环出来. for ... of ...
- openstack--7--创建一台虚拟机
回顾下前几节用到的东西 MySQL:为各个服务提供数据存储RabbitmQ:为各个服务之间提供通信提供交通枢纽Keystone:为各个服务之间通信提供认证和服务注册Glance:为虚拟机提供镜像管理N ...
- C# string 转 bool
bool _b = Convert.ToBoolean("False"); "_b => false" // // 摘要: // 将逻辑值的指定字 ...