包装类

针对8中基本数据类型相应的引用类型——包装类,有了类的特点,就可以调用类中的方法是

基本数据类型 包装类
boolean Boolean
char Character
byte Byte
short Short
int Interger
long Long
float Float
double Double
  • 案例展示

int与Interger之间的转换,jdk5之前采用手动装箱与拆箱,其中装箱:基本数据类型——>包装类型,相反的则为拆箱。而jdk5之后采用自动装箱与拆箱的方法。自动装箱底层掉哦用的valueof()方法,比如Interger.valueOf()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package Learn;
public class Test{
public static void main(String[] args) {
//手动装箱
int i=1000;
//Integer integer=new Integer(i);
//或者
Integer integer1=Integer.valueOf(i);


//手动拆箱
int g=integer1.intValue();

/*jdk5之后,就可以自动装箱和自动拆箱了,从本质上来说,其底层还是调用的valueOf()方法
这是jdk5之后的源码,仍旧可以方法返回了一个valueOf方法
*@IntrinsicCandidate
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
*
* */

Integer integer2=i;

//自动拆箱
int n1=integer2;
}

}
  • 练习

结果为1.0,其中三元运算符为一个整体,所以最终要进行类型提升,最终的输出类型为double类型。

1
2
3
4
5
6
7
package Learn;
public class Test{
public static void main(String[] args) {
Object obj=false;
System.out.println(obj.equals(false)?new Integer(1):new Double(1.2));
}
}

image-20220317190943341

  • 包装类型与String类型的转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package Learn;
public class Test{
public static void main(String[] args) {
//自动装箱
Integer i=1;
//第一种转换方式
String n1=i+"";
//第二种转换方法
String n2=i.toString();
//第三种方法,使用valueof方法,由于此方法需要传入一个对象,而我们包装之后便是存在一个对象
String n3=String.valueOf(i);

String n4="12345";
//String类型转换成int类型
//第一种public static int parseInt(String s) throws NumberFormatException {
// return parseInt(s,10);
// }
Integer n5=Integer.parseInt(n4);
//第二种,利用Integer自带的构造器
Integer n6=new Integer(n4);
}
}
  • 常用的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package Learn;
public class Test{
public static void main(String[] args) {
Integer n1=100;
Integer n2=1000;
System.out.println(Integer.MAX_VALUE);
//输出Integer范围的最大值与最小值
System.out.println(Integer.MIN_VALUE);
//判断是不是字母,数字
System.out.println(Character.isDigit('a'));
System.out.println(Character.isLetter('a'));
System.out.println(Character.isUpperCase('a'));
System.out.println(Character.isLowerCase('a'));
//转换大小写
System.out.println(Character.toUpperCase('a'));
System.out.println(Character.toLowerCase('a'));
}
}
  • 练习
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package Learn;
public class Test{
public static void main(String[] args) {
Integer n1=new Integer(100);
Integer n2=new Integer(100);
//在这里将其封装new一个对象,但是n1与n2对象不相等,但是值相等,===比较的是对象,equal比较值
System.out.println(n1==n2);
System.out.println(n1.equals(n2));
/*在这里我们知道自动转换类型使用了valueof方法,在这里当我们传输的i对象在范围(-128-127)之间时,
我们返回的是数字,但是当不满足源码中的条件时,则返回一个new对象,这也就解释了下面两组数据同样的赋值方法,结果不同的原因
* public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}*/
Integer integer = 100;
Integer integer1 = 100;
System.out.println(integer==integer1);
System.out.println(integer.equals(integer1));

Integer integer3= 1000;
Integer integer4 = 1000;
System.out.println(integer3==integer4);
System.out.println(integer3.equals(integer4));

}
}

点击并拖拽以移动

但是注意只要存在基本数据类型,==就是判断的值是否相等,就不要去管对象的事情了。