Java笔记 - Wrapper类

包装类Wrapper

在Java中一切都是对象,为了方便操作基本数据类型值,所以将基本数据类型也封装成了对象,每个基本数据类型都有一个与之相对应的类,这些类统称包装类(Wrapper Class)。

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Characte
boolean Boolean

该包装类主要用于基本数据类型和字符串之间的转换。
基本数据类型和字符串相互转换

  1. 基本数据类型—>字符串
    1. 基本数据类型值+”“
    2. String类中的静态方法static String valueOf(基本数据类型)
    3. 包装类的静态方法static String toString(基本数据类型)
  2. 字符串—>基本数据类型
    1. 使用包装类中的静态方法 static xxx parseXxx(“xxx类型的字符串”);
      int parseInt(“intstring”);
      long parseLong(“longstring”);
      boolean parseBoolean(“booleanstring”);
      只有Character没有parse方法
    2. 如果字符串被包装类(Integer等)进行对象的封装,可以使用包装类中另一个非静态的方法
      xxx xxxValue();将一个包装类(Integer等)的对象转成基本数据类型值。
//基本数据类型--->字符串
System.out.println(123+""+1);
System.out.println(String.valueOf(21)+1);
System.out.println(Integer.toString(56)+1);

//字符串--->基本数据类型
System.out.println(Integer.parseInt("123")+1);
Integer in = new Integer("12");
System.out.println(in.intValue()+1);

输出结果:
1231
211
561
124
13

进制转换
1. 十进制—>其他进制
Integer类中的静态方法:
static String toBinayrString(int i):以二进制无符号整数形式返回一个整数参数的字符串表示形式,i - 要转换为字符串的整数,返回类型是字符串
static String toOctalString(int i):八进制
static String toHexString(int i):十六进制
static String toString(int i, int radix):radix - 自定义进制
2. 其他进制—>十进制
1. Integer类中的静态方法:
static int parseInt(String s):将字符串参数作为有符号的十进制整数进行解析
static in parseInt(String s, int radix):自定义进制,将字符串参数解析为有符号的整数
2. 使用Integer类中的静态方法static Integer valueOf(String s, int radix)返回字符串用自定义进制解 析出的Integer对象,然后将这个Integer对象使用toString()方法变成字符串。
//二进制转十进制
System.out.println(Integer.valueOf(“10”,2).toString()+1);
// 八进制转成十进制
System.out.println(Integer.valueOf(“125”,8).toString()+1);
//十六进制转成十进制
System.out.println(Integer.valueOf(“3c”,16).toString()+1);
例:

System.out.println(Integer.toBinaryString(2)+3);
System.out.println(Integer.toHexString(60)+3);
System.out.println(Integer.parseInt("3c",16));
//二进制转十进制 
System.out.println(Integer.valueOf("10",2).toString()+1);
// 八进制转成十进制 
System.out.println(Integer.valueOf("125",8).toString()+1);
//十六进制转成十进制 
System.out.println(Integer.valueOf("3c",16).toString()+1); 

输出结果:
103
3c3
60
21
851
601

Integer a = new Integer("3");
Integer b = new Integer(3);
System.out.println(a==b);
System.out.println(a.equals(b));

输出结果:
false//比较的是地址值
true//Integer覆盖了equals方法,比较的是数值是否相同
一般情况下,==和equals比较的都是地址值,如果使用的是同一个对象的引用,返回true,否则返回false
特殊情况下复写equals方法比较的是两个对象的内容是否相同

平时我们可以比较基本数值的大写,但是当封装成对象后怎么进行大小的比较?
可以使用Integer类中的方法int compareTo(Integer anotherInteger);相等返回0,大于参数Integer返回1,小于参数Integer返回-1。(String类比较返回的是在ASCII码中的差值)

自动装箱与自动拆箱
JDK1.4版本Integer i = new Integer(4);
JDK1.5版本Integer i = 4;//自动装箱
Double d = 123.456;
Character c = ‘a’;
Boolean b = false;
i = i +6;//i = new Integer(i.intValue()+6);//i.intValue就是自动拆箱的过程,但是由于Integer是引用型变量,所以有可能Integer指向的地址是null,所以有必要做健壮性判断

Integer in1 = 127;
Integer in2 = 127;
System.out.println(in1==in2);
System.out.println(in1.equals(in2));
Integer in3 = 128;
Integer in4 = 128;
System.out.println(in3==in4);
System.out.println(in3.equals(in4));

输出结果:
true
true
false
true

分析:Integer类复写了equals方法,比较的是内容,内容相同则返回true
引用类型用==判断的时候只有指向同一个地址才返回true,当自动装箱的是一个字节(-128~127)的时候,该数据会被共享,每次复制总是指向这个数字的地址值,不会重新开辟空间,所以用==对比的时候返回true

你可能感兴趣的:(java)