java八个包装类的名字_JavaSE学习笔记13:基本类型对应的8个包装类

基本类型对应的8个包装类

1.8种包装类存在的意义

java中为8种数据类型又对应准备了8种包装类型。8种包装类属于引用数据类型,父类是Object。

为什么要提供8种包装类呢?

因为8种基本类型不够用

public class IntegerTest01 {

public static void main(String[] args) {

/*假设有需求:调用doSOme()方法的时候需要传一个数字进去,

但是数字属于基本数据类型,而doSOme方法参数的类型是Object

可见doSome方法无法接收基本数据类型的数字。怎么办?可以传一个数字对应的包装类进去。

*/

//把100这个数字经过构造方法包装成对象

MyInt myInt = new MyInt(100);

//doSome方法虽然不能直接传100,但是可以传一个100对应的包装类型

doSome(myInt);

}

public static void doSome(Object obj){

System.out.println(obj);

}

//输出结果为:100

}

package se2.integer;

public class MyInt {

int value;

public MyInt() {}

public MyInt(int value) {

this.value = value;

}

//重写toString方法

@Override

public String toString() {

return String.valueOf(value);

}

}

2.8种基本数据类型对应的包装类型名是什么?

基本数据类型

包装类型

byte

java.lang.Byte(父类Number)

short

java.lang.Short(父类Number)

int

java.lang.Integer(父类Number)

long

java.lang.Long(父类Number)

float

java.lang.Float(父类Number)

double

java.lang.Double(父类Number)

boolean

java.lang.Boolean(父类Object)

char

java.lang.Character(父类Object)

以上8种包装类中,重点以java.lang.Integer为代表进行学习,其他的类型照葫芦画瓢就行了

3.装箱和拆箱的概念

Number是一个抽象类,无法实例化对象

Number类中有这样的方法:

byte byteValue()

以byte形式返回指定的数值

abstract double doubleValue()

以double形式返回指定的数值

abstract float floatValue()

以float形式返回指定的数值

abstract int intValue()

以int形式返回指定的数值

abstract long longValue()

以long形式返回指定的数值

short shortValue()

以short形式返回指定的数值

这些方法其实所有的数字包装类的子类都有,这些方法是负责拆箱的。

public class IntegerTest02 {

public static void main(String[] args) {

//123这个基本数据类型,进行构造方法的包装达到了:基本数据类型向引用类型的转换

//基本数据类型(转换)-->引用数据类型(装箱)

Integer i = new Integer(123);

//将引用数据类型(转换)-->基本数据类型(拆箱)

float f = i.floatValue();

System.out.println(f);//123.0

//将引用数据类型(转换)-->基本数据类型(拆箱)

int retValue = i.intValue();

System.out.println(retValue);//123

}

}

4.自动装箱与自动拆箱

在JDk1.5(java5)之后,支持自动拆箱和自动装箱了

自动装箱:基本数据类型自动转换成包装类

自动拆箱:包装类自动转换成基本数据类型

有了自动拆箱之后,Number类中的方法就用不着了!

自动装箱和自动拆箱的好处:方便编程

package se2.integer;

public class IntegerTest05 {

public static void main(String[] args) {

//900是基本数据类型

//x是包装类型

//基本数据类型--(自动转换)-->包装类型:自动装箱

Integer x = 900;

System.out.println(x);//900

//x是包装类型

//y是基本数据类型

//包装类型--(自动转换)-->基本数据类型:自动拆箱

int y = x;

System.out.println(y);//900

//z是一个引用,是一个变量,z还是保存了一个对象的内存地址

Integer z = 1000;//等同于:Integer z = new Integer(1000);

//分析为什么没有报错呢?

/**

* +号两边要求是基本数据类型的数字,z是包装类,

* 不属于基本数据类型,这里会自动拆箱,将z转换

* 成基本数据类型

*/

System.out.println(z + 1);

Integer a = 1000;//Integer a = new Integer(1000);a是个引用,保存内存地址指向对象

Integer b = 1000;//Integer b = new Integer(1000);b是个引用,保存内存地址指向对象

//== 比较的是对象的内存地址,a和b两个引用中保存的对象内存地址不同

//== 不会触发自动拆箱机制。(只有+-*/等运算的时候才会)

System.out.println(a == b);//false

}

}

扩展:

package se2.integer;

/*

这个题目是Integer非常重要的面试题

*/

public class IntegerTest06 {

public static void main(String[] args) {

Integer a = 128;

Integer b = 128;

System.out.println(a == b);//false

/**

* java中为了提高程序的执行效率,将-128到127之间所有的包装对象提前创建好,

* 放到了一个方法区的“整数型常量池”当中了,目的是只要用这个区间的数据不需要

* 再new了,直接从整数型常量池当中取出来。

*/

//原理:x变量中保存的对象的内存地址和y变量中保存的对象的内存地址是一样的

Integer x = 127;

Integer y = 127;

System.out.println(x == y);//true

}

}

5.Integer的构造方法

关于Integer类的构造方法,有两个:

​Integer(int)

​Integer(String)

package se2.integer;

public class IntegerTest03 {

public static void main(String[] args) {

//java9之后不建议使用这个构造方法了

//将数字100转换成Integer包装类型(int -->Integer)

Integer x = new Integer(100);

System.out.println(x);//100

//将String类型的数字,转换成Integer包装类型(String -->Integer)

Integer y = new Integer("123");

System.out.println(y);//123

//double --> Double

Double d = new Double(1.23);

System.out.println(d);//1.23

//String --> DOuble

Double e = new Double("3.14");

System.out.println(e);//3.14

}

}

通过访问包装类的常量,来获取最大值和最小值,如下

package se2.integer;

public class IntegerTest04 {

public static void main(String[] args) {

System.out.println("int的最大值:" + Integer.MAX_VALUE);

System.out.println("int的最小值:" + Integer.MIN_VALUE);

System.out.println("byte的最大值:" + Byte.MAX_VALUE);

System.out.println("byte的最小值:" + Byte.MIN_VALUE);

/**输出结果:

* int的最大值:2147483647

* int的最小值:-2147483648

* byte的最大值:127

* byte的最小值:-128

*/

}

}

6.Integer的常用方法

package se2.integer;

public class IntegerTest07 {

public static void main(String[] args) {

//1手动装箱与自动装箱

//手动装箱

Integer x = new Integer(1000);

//手动拆箱

Integer y = x.intValue();

System.out.println(y);//1000

Integer a1 = new Integer("123");

//编译的时候没问题,运行时呢?

//不是一个数字可以包装成Interger吗?不能!运行时会出现异常!

//java.lang.NumberFormatException(数字格式化异常)

//Integer a2 = new Integer("阿波");

//2重点方法

//static int parseInt(String s)

//静态方法,传参String,返回int

/**

* 为什么常用这个方法?原因如下

* 网页上文本框中输入的100实际上是“100”字符串,后台数据库中

* 要求存储100数字,此时java程序需要将“100”转换成100数字。

*/

int retValue = Integer.parseInt("123");//String -转换->int

System.out.println(retValue + 110);//233

/*

int retValue2 = Integer.parseInt("阿波");

System.out.println(retValue2 + 100);

//报错:java.lang.NumberFormatException: For input string: "阿波"

*/

//照葫芦画瓢

double retValue3 = Double.parseDouble("3.14");

System.out.println(retValue3 + 1);//4.140000000000001(精度问题)

float retValue4 = Float.parseFloat("1.0");

System.out.println(retValue4 + 1);//2.0

//以下内容作为了解,不需要掌握

/**

* static String toBinaryString(int i)

* 静态的:将十进制转换成二进制字符串

*/

String binaryString = Integer.toBinaryString(3);

System.out.println(binaryString);//11(二进制字符串)

/**

* static String toHexString(int i)

* 静态的:将十进制转换成十六进制的字符串

*/

//十六进制:1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a...

String hexString1 = Integer.toHexString(16);

System.out.println(hexString1);//10

String hexString2 = Integer.toHexString(17);

System.out.println(hexString2);//11

/**

* static String toOctalString(int i)

* 静态的:将十进制转换成八进制字符串

*/

String octalString = Integer.toOctalString(8);

System.out.println(octalString);//10

/**

* valueOf方法作为了解

* static Integer valueOf(int i)

* 静态的:int --> Integer

*/

Integer i1 = Integer.valueOf(100);

System.out.println(i1);//100

/** static Integer valueOf(String s)

* 静态的:String --> Integer

*/

Integer i2 = Integer.valueOf("100");

System.out.println(i2);//100

}

}

7.String、int、Integer之间互相转换

package se2.integer;

public class IntegerTest08 {

public static void main(String[] args) {

//String --> int

String s1 = "100";

int i1 = Integer.parseInt(s1);

System.out.println(i1 + 1);//101

//int --> String

String s2 = i1 + "";//i1还是100字符串

System.out.println(s2 + 1);//1001

//int --> Integer

//自动装箱

Integer x = 1000;

//Integer --> int

//自动拆箱

int y = x;

//String --> Integer

Integer a = Integer.valueOf("123");

//Integer --> String

String b = String.valueOf(a);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值