java基本类型、对应的包装类型(自动拆箱和自动装箱)

什么是自动装箱和拆箱?
      自动装箱就是Java自动将原始类型值转换成对应的包装类型,如将int的变量转换成Integer对象,这个过程叫做装箱。反之将Integer引用类型转换成int类型值,这个过程叫做拆箱。因为装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。
基本数据类型:byte,short,char,int,long,float,double、boolean
对应的封装类为:Byte,Short,Character,Integer,Long,Float,Double,Boolean

自动装箱时编译器调用valueOf将基本类型值转换成引用类型。
自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。

//把int类型转换为Integer类型:
int i = 23;
Integer num = Integer.valueOf(i);

//把Integer类型转换为int类型
int i = num.intValue();

自动装箱的弊端有哪些?
1、在一个循环中进行自动装箱操作的时候,会创建多余的对象,会影响程序的性能。

Integer sum = 0;
for(int i = 0;i < 100;i++0{
    sum += i;
}

      代码sum += i 可以看成sum = sum + i,但是 + 操作符不适用于Integer对象,所以就会对sum先进性自动拆箱操作,然后进行数值相加操作,最后发生自动装箱操作转换成Integer对象。
      通过XJad反编译软件我们可以看到源码是这样的:

Integer sum = Integer.valueOf(0);
for (int i = 0; i < 100; i++){
    sum = Integer.valueOf(sum.intValue() + i);
}

       由于我们这里声明的sum是Integer类型,在上面循环中我们或创建几乎100个没有用的Integer对象,会降低程序的性能,并且还加重了垃圾回收的工作量。

2、当一个对象和一个原始数据值进行比较时,如果这个对象没有进行初始化或者为null,在自动拆箱中会抛出NullPointerException。所以今后我们在进行操作对象的时候要首先判断是否为null

private static Integer count;
public static void main(String[] args) {
    if(count <= 0){
        System.out.println("Count is not started yet");
    }
}

将基本数据类型封装成对象有什么好处?
1、为了对基本类型进行更多的操作,更方便的操作,java针对每一种基本数据类型提供了对应的类类型,即包装类类型。
2、可以用于基本数据类型和字符串之间的转换


int类型和String类型的相互转换:
int类型转换为String类型:
(1) 通过拼接一个空字符串。也就是number+”“的形式
(2) 通过String类的valueOf方法。也就是String.valueOf(number)(推荐)
          public static String valueOf(T l):返回 参数的字符串表示形式。
(3) 通过转换为Integer对象,然后调用toString()方法。(不推荐)
          public String toString():返回一个表示该 Integer 值的 String 对象。
(4)调用Integer的toString(int i)方法
          public static String toString(int i):返回一个表示指定整数的 String 对象

String s1 = "" + number;                    //法一
System.out.println("s1:" + s1); 

String s2 = String.valueOf(number);         //法二
System.out.println("s2:" + s2);

Integer i = new Integer(number);            //法三
String s3 = i.toString();
System.out.println("s3:" + s3);

String s4 = Integer.toString(number);       //法四
System.out.println("s4:" + s4);

String类型转换为int类型:

String s = "100";
Integer i = new Integer(s);     //法一
int x = i.intValue();           
System.out.println("x:" + x);

int ii = Integer.parseInt(s);   //法二<font color="red">(推荐)</font>
System.out.println("ii:" + ii);



Integer类:java.lang

public final class Integer extends Number implements Comparable<Integer>

构造方法:
public Integer(int value):构造一个新分配的 Integer 对象,它表示指定的 int 值。
public Integer(String s) throws NumberFormatException:这个字符串必须是由数字组成。

十进制转换为其他进制:
public static String toBinaryString(int i):以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
public static String toOctalString(int i):以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
public static String toHexString(int i):以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
public static String toString(int i,int radix):返回用第二个参数指定基数(2进制、8进制等)表示的第一个参数的字符串表示形式。
进制的范围:2-36(因为0-9 a-z总共有36个)

其他进制转换为十进制:
public static int parseInt(String s,int radix) throws NumberFormatException:使用第二个参数指定的基数,将字符串参数解析为有符号的整数。

范围:
public static final int MAX_VALUE:值为 231-1 的常量,它表示 int 类型能够表示的最大值。
public static final int MIN_VALUE:值为 -231 的常量,它表示 int 类型能够表示的最小值。




Character类:java.lang

public final class Character extends Object implements Serializable, Comparable<Character>

public static boolean isLowerCase(char ch):确定指定字符是否为小写字母。
public static boolean isUpperCase(char ch):确定指定字符是否为大写字母。
public static boolean isDigit(char ch):确定指定字符是否为数字。
public static char toUpperCase(char ch):把给定的字符转换为大写。
public static char toLowerCase(char ch):把给定的字符转换为小写。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值