廖雪峰Java2面向对象编程-6Java核心类-3包装类型

时间:2022-12-11 14:34:31

Java的数据类型:

  • 基本类型:int boolean float
  • 引用类型:所有class类型

    廖雪峰Java2面向对象编程-6Java核心类-3包装类型

    为一个基本类型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);

廖雪峰Java2面向对象编程-6Java核心类-3包装类型

类型转换

        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包装类型的更多相关文章

  1. 廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder

    字符串操作过程中,每次用 + 拼接字符串,有以下问题: 每次循环都会创建新的对象 绝大部分都是临时对象.浪费内存 影响GC效率 String s = ""; for(int i=0 ...

  2. 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码

    Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...

  3. 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类

    1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...

  4. 廖雪峰Java2面向对象编程-6Java核心类-5枚举类

    直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...

  5. 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean

    1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...

  6. 廖雪峰Java2面向对象编程-3继承和多态-1继承

    1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...

  7. 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础

    1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...

  8. 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar

    1.classpath 1.1classpath定义 classpath是一个环境变量 classpath指示JVM如何搜索class classpath设置的搜索路径与操作系统相关 * window ...

  9. 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

    1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...

随机推荐

  1. 页面测试点testpoint

    页面测试点整理(非逻辑测试点) 由于自己一年来一直在做页面测试,也看了很多测试理论的书和方法,但是方法并非也无法照搬,此处总结自己工作以来通过各种坑摸出来的一些方法点,希望一边靠上经典测试理论,一边形 ...

  2. 关于变量和函数前&amp&semi;符号的作用

    首先看一下下面的例子 <?php $a="val1"; $b="val2"; $a=&$b; echo $a."<br/>& ...

  3. Maximum sum(poj 2479)

    题意:给一段数列,将这个数列分成两部分,使两部分的最大子段和的和最大,输出和 /* 看数据没想到是(O)n的算法,求出从前向后的最大子段和和从后向前的最大子段和, 然后枚举断点. 第一次提交不小心折在 ...

  4. React笔记&lowbar;&lpar;4&rpar;&lowbar;react语法3

    生命周期 很多语言中都讲了关于生命周期.这可是决定生命的周始,有没有存在感的关键啊. 生命周期,有生有死,有始有终,因果轮回,循环往复.(说多了) react中,主要说明的是 一个组件的生命周期.简单 ...

  5. MySQL数据库中,使用游标循环遍历

    /*对*dt库下的所有数据表删除docuemttype为空和documenttype为MD,PD,ET的数据:delete from 表名 where length(documenttype)< ...

  6. Foreign Exchange(交换生换位置)

     Foreign Exchange Your non-profit organization (iCORE - international Confederation of Revolver Enth ...

  7. 阅读http&colon;&sol;&sol;zh&period;lucida&period;me&sol;有感

    lucida大神本科毕业于大工,研究生毕业于北航,有这样的学历在社会上混就已经绰绰有余了,但是lucida神并不满足,刻苦努力,拼搏进取,最后进入google london工作,曾经一度在micros ...

  8. 模板文件引入css样式文件

    引用路径问题:相对路径和绝对路径 相对路径:相对路口文件index.php设置 绝对路径:从虚拟主机站点目录开始设置 css样式文件引入图片,路径的设置 相对地址:相对css文件本身设置 ①模板文件 ...

  9. 草料Chrome浏览器插件,让二维码更好用

    安装插件草料chrome插件,是专为chrome核心的浏览器开发的一个二维码应用增强工具插件. 自动将地址栏链接生成二维码 以谷歌原生的chrome浏览器为例,插件安装成功后会在浏览器地址栏旁边出现一 ...

  10. Python - GUI(Graphical User Interface,图形用户界面)

    Tkinter https://docs.python.org/3/library/tkinter.html Python自带的标准GUI库,可用于快速创建GUI应用程序,能够满足基本的GUI程序要求 ...