API的概述和八大基本数据类型以及对应包装类及自动装箱和自动拆箱

 

 

 

 

八大基本数据类型以及对应包装类

八大基本数据类型

  • byte/8
  • char/16
  • short/16
  • int/32
  • float/32
  • long/64
  • double/64
  • boolean/~

注:具体大小没有明确规定,JVM 会在编译时期将 boolean 类型的数据转换为 int,使用1来表示 true,0 表示false。

JVM ⽀持 boolean 数组,但是是通过读写 byte 数组来实现的。 

包装类

java中为8种基本数据类型对应准备了8种包装类型

8种包装类属于引用数据类型

1. 为什么要再提供8种包装类?

  • 因为8种基本类型不够用。我们有时需要把基本类型作为Object使用。
基本数据类型包装类型
bytejava.lang.Byte(父类Number)
shortjava.lang.Short(父类Number)
intjava.lang.Integer(父类Number)
longjava.lang.Long(父类Number)
floatjava.lang.Float(父类Number)
doublejava.lang.Double(父类Number)
booleanjava.lang.Boolean(父类Object)
charjava.lang.Character(父类Object)

java专门针对8个基本数据类型,写的8个对应的包装类,对应关系分别是:

  • int ---> Integer;
  • char --> Character;

剩下的6个都是首字母大写;

有什么作用:

这些类中提供了一些方法,可以帮我们完成字符串和基本数据类型相互转换,且包装类中也帮我们记录了这个类型最大值和最小值;

2. Number类

8种包装类中其中6个都是数字对应的包装类,他们的父类为Number,研究一下Number中公共的方法

  • Number是一个抽象类无法实例化对象。
  • Number类中有以下方法用于拆箱

// 基本数据类型向引用数据类型转换(装箱)
Integer i = new Integer(123);
// 将引用数据类型转换成基本数据类型(拆箱)
float f = i.floatValue();

自动装箱和自动拆箱:

包装类型的数据转基本数据类型过程叫做拆箱,这个过程在jdk5之后就可以自动完成了,因此叫做自动拆箱;
基本数据类型转成包装类型的数据的过程叫做装箱,这个过程在jdk5之后就可以自动完成了,因此叫做自动装箱;

字符串和基本数据类型的相互转换(重要):

通用套路,都是用包装类静态方法,parseXxx  

没有parseChar,如果要转字符,只能利用字符串的 charAt(索引)这个方法,

根据索引,获取某个位置的字符;

/*
    练习包装类
 */
public class MyInt {
    public static void main(String[] args) {
        // 自动装箱
        Integer a = 11;
        // 自动拆箱,再装箱
        a+=3;
        System.out.println(a);
         自动拆箱
        int b = a;
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        // 与字符串的相互转换
        // 将b转成字符串类型
        String s = b+"";// 字符串14
        System.out.println(s + 1);// 141

        // 把s转成int类型, 通用套路,都是用包装类的静态方法,parseXxx  没有parseChar,如果要转字符,只能利用字符串的 charAt(索引)这个方法,根据索引,获取某个位置的字符
        int i = Integer.parseInt(s);// 整数14
        System.out.println(i + 1);// 15

        String s2 = "6.6";
        System.out.println(Double.parseDouble(s2) + 1.1);


    }
}

java自动装箱的好处:

一、前言

Java自动装箱和自动拆箱是JDK5.0版本提供的新特性,所以在JDK5.0后的版本中都可以使用,之前的版本则不支持该特性。

理解自动装箱和自动拆箱需要先对java中8种原始数据类型和相对应的封装类有所了解。

二、8种原始数据类型及其对应的封装类

byte --->Byteshort --->Shortint --->Integerlong --->Longfloat --->Floatdouble --->Doublechar --->Characterboolean ---> Boolean
注:原始数据类型的封装类都在java.lang包下,可以直接使用

三、什么是自动装箱

自动装箱指的是:可以将一个原始数据类型直接赋值给相应的封装类,其类型转换工作由java编译器自动处理

Integer i = 100;
Integer j= 100;
System.out.println(i==j);//true
System.out.println(i.equals(j));//true

Integer m= 200;
Integer n= 200;
System.out.println(m==n);//false
System.out.println(m.equals(n));//true
int k = 100;
System.out.println(k==j);//true
System.out.println(j.equals(k));//true

输出结果是:
true
true
false
true
true
true

理解这道题的关键点有2个:

1. "=="比较运算符是引用地址比较,equals()方法是内容比较(注:可通过重写equals()方法自定义比较规则)

2. 原始数据类型在自动装箱成封装类对象时,如果原始数据类型的值为-128~127(相当于byte值范围),java编译器会判断曾经是否有作过相同的转换,如果有,则把以前装载好的封装类对象的引用地址直接赋给当前对象,所以Integer i = 100,Integer j = 100中,i 跟 j 共享一个Integer对象
 

Integer i = 100;
Integer j= new Integer(100);
Integer k= Integer.valueOf(100);

System.out.println(i==j);//false
System.out.println(j== k);//false

输出结果是:
false
false

  • 原因:new Integer(100) 与 Integer.valueOf(1)都是重新new出一个对象,所以i,j,k是三个不同的对象
Integer i = 100;
long j = 100;
Long k= 100;

System.out.println(i==j);
System.out.println(j== k);

代码有误,Long k = 100需要改成Long k = (long) k;

3. Integer

  • 以上8种包装类,重点以java.lang.Integer为代表进行学习
// 构造函数
Integer i = new Integer(100);
Integer j = new Integer("123");

// 访问包装类的常量,来获取最大值和最小值
Integer.MAX_VALUE 2147483647
Integer.MIN_VALUE

// 在JDK1.5之后支持自动装箱和自动拆箱
// 自动装箱: int自动转换为Integer
Integer x = 100;
// 自动朝拆箱: Integer自动转换为int
int y = x;

x+1 //不会报错,x自动拆箱为int,因为+运算符右边是基本数据类型,+要求两边都是基本数据类型
x == y // true 这里不会自动拆箱为int,因为==运算符不需要两边运算数为int类型

// 常用的两个方法
// 1.intValue() 手动拆箱
Integer i = 123;
int retValue = i.intValue();
// 2. static int parseInt(String s) 字符串转数字  静态方法 
int retValue = Integer.parseInt("123");
// 如果字符串不是数字,会抛出 NumberFormatException的异常

4. 缓存池

java中为了提高程序执行效率,将-128~127之间包装对象提前创建好,放到了一个方法区“整数型常量池”中,目的是只要用这个区间的数据不需要再new,直接从整数型常量池取出来。用static final修饰的对象,会存放在方法区常量池中。

5. Integer int String 互转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值