Object类、基本类型包装类、自动拆箱与装箱

Object类    

   在一个类没有直接使用extends关键字继承其他类时,这个类默认继承Object,Object是整个Java类中最顶级的类。

to String() 

Object类中有这样一个方法to String()方法。

作用:用于输出对象时,将对象转为字符串形式。

在控制台输出一个对象,那对象存储在内存中,怎么输出?

其实在输出时,看似输出的是对象,其实输出的是一个字符串。因为在输出对象的时,默认调用类中的to String(),若类中没有to String()方法,那么就会调用父类中的to String()。但是子类的实现与父类的实现不同,所以在子类中重写父类的to String(),自己指定输出格式,以后输出时调用自己的to String()方法。

Object类中的to String()方法,它输出的是对象的类名以及对象在内存中的地址:

 public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
 }
//hashCode()拿到对象在内存中的哈希值(10进制整数)
//Integer.toHexString(哈希值)转为16进制整数

基本类型包装类

基本类型---->8种基本类型:byte、short、int、long、float、double、boolean、char

基本类型是通过这8种关键字,来进行声明定义的,结构简单,不符合面向对象的思维操作,例如:

int a = 10;//值就是10

为什么要有包装类呢?

因为基本数据类型,它是使用关键字定义的,而不是面向对象的。所以在Java语言中,为每一个基本数据类型都提供了一个类进行包装表示,这样就是以面向对象的方式来进行操作。

因为有8种数据类型,所以Java为我们提供了8个包装类。

包装类的用途,主要包含两种:

  1. 作为和基本数据类型对应的类型存在

  2. 包含每种基本数据类型的相关属性如最大值,最小值等,以及相关的操作方法。

包装类常用的属性方法

以Integer为例,其余7个都是类似的:

  • public static final int MAX_VALUE 最大的int型数
  • public static final int MIN_VALUE 最小的int型数

构造方法 :通过构造方法,把字符串数字,基本类型值,包装到一个包装类对象中,使用面向对象进行操作。

  • Integer(int a);
  • Integer(String a);

比较方法:

  • static int compareTo(Integer a); //比较对象中的内容,输出0(相等)、1(大于)、2(小于)
  • boolean equals(Object);
  • int max(int a,int b); //输出a,b二者中最大的
  • int min(int a,int b); //输出a,b二者中最小的

转换方法:

  • static toBinaryString(int i); //输出二进制
  • static String toHexString(int i); //输出十六进制
  • static String toOctalString(int i); //输出八进制
  • int intValue(); //返回的是包装类型中的原始基本值
  • static int parseInt(String s); //把字符串数字转为基本类型Int
  • String toString(); //将整数类型的值转换为字符串类型,并返回转换后的字符串
  • static Integer valueOf(int i) ;//将基本类型转为包装类型
  • static Integer valueOf(String s);//将字符串类型转为包装类型

基本类型与基本类型包装类之间的转换

自动装箱:就是把基本类型转为包装类型;

int a = 10;
Integer ba = a;//把基本类型直接赋给引用类型,进行包装,产生了一个Integer类的对象,称为自动装箱

自动拆箱:就是把包装类型转为基本类型

Integer c = new Integer(10);
int d=c;//拆箱时,默认会调用c.intValue();取出其中的int值,这个过程是隐式的

关于自动装箱的面试题

Integer a = 127;
Integer b = 127;//a = b true
​
Integer c = 128;
Integer d = 128;//c = d false

原因:首先执行上诉语句时,默认会调用

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

通过上述源码可以看出在Integer类中为了节省时间,对-128---+127之间的256个对象进行了缓存(在数组中),所以当传入的值

  • 在-128---+127之间时,则直接从数组中获取,如果取得的值是相同的,那么取得的对象也就是相同的。

  • 不在-128---+127之间时,则每次都会创建一个新的对象

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值