Java-基本类型包装类

引出基本类型包装类:

问题1:在面向对象中,”一切皆对象”,现在问题来了,int  age = 17;请问这age代码哪里有对象,基本类型变量,不是对象.此时有矛盾.

问题2:现在给你一个复杂的十进制数据,请你迅速在程序给我转换为2进制,8进制,16进制,算法太麻烦了.

问题3:现在使用double类型来表示学生的考试成绩,double类型初始值为0,0:但是:你怎么表示一个人缺考和考试得0分.

-------------------------------------------------------------------------

上述的问题,进就是因为基本数据类型缺少对象,如果需要对象,必须先有类.

此时我们可以为每一个基本类型都编写一个对应的包装类,类中包含了该基本类型的一个值.

八大基本数据类型的包装类都使用final修饰,都是最终类,都不能被继承.

//包装int类型的值
public  class IntWapper
{
      private   int  value;//值
      public  IntWapper(int value)
      {
              this.value   =  value;
      }
      //包含int类型相关的算法
     把十进制转换2进制/8进制/16进制
}
....main......
{
               IntWapper wapper = null; //没有对象,没有数据

               IntWapper wapper = new IntWapper(0);
}

l装箱:把基本类型数据转成对应的包装类对象。

l拆箱:把包装类对象转成对应的基本数据类型数据。

Sun公司从Java5开始提供了的自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能 :

ü自动装箱:可把一个基本类型变量直接赋给对应的包装类变量。

ü自动拆箱:允许把包装类对象直接赋给对应的基本数据类型变量。

自动装箱和拆箱,也是一个语法糖/编译器级别新特性.

在底层依然是手动装箱和拆箱操作.

但是:装箱操作使用的是Integer.valueOf的方式,而不是直接new Integer.

------------------------------------------------------------

switch支持的数据类型:byte,short,char,int,也支持对应的包装类. 为何?

就是在底层,switch中会对包装类做手动拆箱操作.

----------------------------------------------


解释Object obj = 17;

    1):自动装箱:   Integer  i = 17;

    2):引用的自动类型转换,把子类对象赋给父类变量:   Object obj = i; 

-----------------------------------------------

Object可以接受一切数据类型的值.

   Object数组:Object[]该数组可以装一切数据类型.

   Object[] arr = {“A”,12,3.14,true};

包装类的常用操作方法:

1:包装类中的常量:

MAX_VALUE/MIN_VALUE/SIZE(在内存中存储占多少位)/TYPE(对应的基本类型)

2:包装类的构造器,xxx类型的包装类Xxx:(xxx表示8大基本数据类型).

Xxx(xxx value):接受自己的基本类型值,如Integer(int val)/Boolean(boolean val)

Xxx(String value): 但是,Character除外.

构造器的作用:创建包装类对象.

3:基本类型和包装类型的转换(装箱和拆箱).

装箱:

Integer i1 = new Integer(123);

Integer i2 = Integer.valueOf(123);//推荐,带有缓存.

拆箱:

int val = i1.intValue();

4:String和基本类型/包装类型之间的转换操作:

String和int/Integer之间的转换操作:转换方法必须在String类中或Integer类中.

String转换为包装类类型:

方式1: static Xxx  valueOf(String str)  :把String转换为包装类的对象

Integer i1 = Integer.valueOf(“123”);

方式2: new  Xxx(String str):

Integer i2= new Integer(“123”);

把包装类对象转换为String.

String  str =  任何对象.toString();

    把基本数据类型转换为String:

String  str = 17 + ””;

String转换为基本数据类型:

static xxx parseXxx(String s)      :xxx表示8大基本数据类型

String  input=”12345”;

int num = Integer.parseInt(input);

5:Boolean b = new Boolean("SB");//false

只认可true/TRUE,为true,其他都是false.

包装类中的缓存设计(享元模式),本质就是缓存设计:

Byte、Short、Integer、Long:缓存[-128,127]区间的数据;

Character:缓存[0,127]区间的数据;

Integer与int的区别(包装类型和基本数据类型的区别):

 1):默认值:

int的默认值是0.

Integer的默认值为null.

推论:Integer既可以表示null,又可以表示0.

2):包装类中提供了该类型相关的很多算法操作方法.

static String toBinaryString(int i) :把十进制转换为二进制

static String toOctalString(int i) : :把十进制转换为八进制

static String toHexString(int i) : :把十进制转换为十六进制

3):在集合框架中,只能存储对象类型,不能存储基本数据类型值.

4):请问:Integer和int是相同的数据类型吗?不是:

public void ooxx(int val){}
           //共存
public void ooxx(Integer val){}

5): 方法中的,基本类型变量存储在栈中,包装类型存放于堆中.

开发中,建议使用包装类型.

版权声明:
作者:yfeer
链接:https://www.yfeer.com/648.html
来源:个人编程学习网
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>