【130天】尚学堂高淇Java300集视频精华笔记(63-64)

第63集:常用类包装类IntegerNumberJDK源码分析

基本数据类型的包装类

  1. JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中。例如使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型。

  2. 为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。

  3. 包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示:

  4. 在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名的第一个字母大写即可。

包装类的用途

  1. 作为和基本数据类型对应的类的类型存在,方便涉及到对象的操作。

  2. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本类型数据、包装类对象、字符串之间提供转化!)。

包装类的共同方法

所有的包装类(Wrapper Class)都有共同的方法,他们是:

/**
 * 测试Integer的用法,其他包装类类似
 */
 
package com.test063;

public class Test063 {
    public static void main(String[] args){
    
        //基本类型转换成为Integer类型
        Integer int1 = new Integer(10);
        Integer int2 = Integer.valueOf(10);
        
        //Integer对象转换成int类型
        int int3 = int1.intValue();
        
        //字符串转化成Integer对象
        Integer int4 = new Integer("234");
        
        //Integer对象转换为字符串
        String str1 = int2.toString();
        
        //一些常见的int类型相关的常量
        System.out.println("int能表示的最大整数:"+ Integer.MAX_VALUE);//正2的31次方
        System.out.println("int能表示的最小整数:"+ Integer.MIN_VALUE);//负2的31次方
        
        //数值转换位字符串
        String str = 234 +"";
        System.out.println(str);
        
    }
}

第64集:常用类/自动装箱和拆箱/缓存处理

自动装箱和拆箱的含义(autoboxing,unboxing)

就是编译器将基本类型和包装类进行自动的互相转换。JDK5.0后,将自动装箱/拆箱引入java中。
   

自动装箱和拆箱的过程    


  1. 自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中。

  2. 自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue()和doubleValue()方法。

自动装箱与拆箱的功能事实上是编译器来帮您的忙,编译器在编译时期依您所编写的语法,决定是否进行装箱或拆箱动作。例如:

Integer i = 100;
// 相当于编译器自动为您作以下的语法编译:
Integer i = new Integer(100);

自动装箱和拆箱现象存在的证明

  1. 自动装箱与拆箱的功能是所谓的“编译器蜜糖”(Compiler Sugar),虽然使用这个功能很方便,但在程序运行阶段您得了解Java的语义。例如下面的程序是可以通过编译的:

    Integer i = null;
    int j = i;
    
    //这样的语法在编译时期是合法的,但是在运行时期会有错误,因为这种写法相当于:
    
    Integer i = null;
    int j = i.intValue();
  2. null表示i没有参考至任何的对象实体,它可以合法地指定给对象参考名称。由于实际上i并没有参考至任何的对象,所以也就不可能操作intValue()方法,这样上面的写法在运行时会出现NullPointerException错误。

/**
 * 测试自动装箱和拆箱
 * 结论:虽然很方便,但是如果不熟悉特殊情况,可能会出错!
 */
 
static void testBoxing(){
Integer b = 23;    //自动装箱
int a = new Integer(20);    //自动拆箱
 

//自动装箱和拆箱,实际上是编译器替我们完成了代码的自动编译,比如:Integer b = 23, 其实运行时执行的仍然是:Integer b = new Integer(23);

//自动装箱拆箱时,对于-128-127之间的值,编译器仍然会把它当做基本类型处理。
Integer h = 100; Integer u = 100;
Integer h2 = 200; Integer u2 = 200;
if(h==u){
System.out.println("100等于");
}
if(h2==u2){
System.out.println("200等于");
}

}

自动拆装箱的范围

//注意一个自动拆装箱的范围,在[-128,127]这个区间,编译器仍然将数值作为基本类型,而非一个对象,这是为了提高效率。
        Integer d1 = 1234;//等同于Integer d1 = new Integer(1234);
        Integer d2 = 1234;//等同于Integer d2 = new Integer(1234);
        System.out.println(d1==d2);    //    false
        System.out.println(d1.equals(d2));    // true
        
        Integer d3 = 123;
        Integer d4 = 123;
        System.out.println(d3==d4);// true 做字符运算时,依然当作基本数据类型处理
        System.out.println(d3.equals(d4));// true

自动装箱和自动拆箱的课堂案例代码

package com.test064;

public class Test064 {
    public static void main(String[] args){
        Integer i1 = new Integer(2);
        Integer i2 = 2;//JDK5.0后,编译器帮我们改进代码,相当于Integer i2 = new Integer(2);
        Integer i3 = 2000;
        int c1 = i3;//自动拆箱,编译器帮我们改进:i3.intValue();
        System.out.println(c1);
        
        
        
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值