基本数据类型和包装数据类型互转
基本数据类型转包装数据类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
int int1 = 1;
// 基本数据类型转包装数据类型:显式转换
Integer integer = Integer.valueOf(1);
// 隐式转换
Integer integer1 = int1;
assertEquals(integer, integer1);
char a = 'a';
// 显式转换
Character character = new Character(a);
// 隐式转换
Character character1 = a;
assertEquals(character, character1);
// 布尔
boolean b = false;
Boolean b2 = new Boolean(b);
Boolean b3 = b;
assertEquals(b2, b3);
|
包装数据类型转基本数据类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 包装数据类型转基本数据类型
Integer integer1 = new Integer(123);
Integer integer2 = 123;
assertEquals(integer1, integer2);
int i1 = integer1.intValue();
int i2 = integer2;
assertTrue(i1 == i2);
// 字符类型
Character character = new Character('b');
Character character1 = 'b';
assertEquals(character, character1);
char c = character.charValue();
char c1 = character1.charValue();
assertEquals(c, c1);
|
基本数据类型数组和包装数据类型数组互转
第三方工具库
1
2
3
4
5
6
7
|
import cn.hutool.core.util.ArrayUtil;
int[] ids = {1, 2, 4};
// 基本类型数组转包装类型数组
Integer[] integers = ArrayUtil.wrap(ids);
// 包装数据类型数组转基本数据类型数组
int[] ints1 = ArrayUtil.unWrap(integers);
|
原理看源码。
stream流处理
1
2
3
|
int[] ids = {1, 2, 4};
// 基本类型数组转包装类型数组
Integer[] integers = (Integer[]) Arrays.stream(ids).boxed().toArray();
|
报错了:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
原因:
虽然 Integer 是 Object 的子类,但是 Integer[]
不是 Object[]
的子类,因为 Integer[]
是数组,我们都知道数组的父元素是 Object,可不是 Object[]
。
所以不能有如下操作:
1
2
|
Object[] objects;
Integer[] integers = (Integer[]) objects;
|
数组转集合
包装类型数组转集合
1
2
3
4
5
6
|
// 包装数据类型转集合
Integer[] integers = new Integer[]{1, 2};
List<Integer> integerList = Arrays.stream(integers).collect(Collectors.toList());
assertEquals(2, integerList.size());
assertEquals(1, (int) integerList.get(0));
assertEquals(2, (int) integerList.get(1));
|
基本数据类型数组转集合
注意我们知道集合只能存放对象,不能存放基本数据类型,所以要将基本数据类型先转成包装数据类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// 基本数据类型数组转集合
int[] ints = new int[]{1, 2, 3};
List<Integer> integerList1 = Arrays.stream(ints).boxed().collect(Collectors.toList());
assertEquals(3, integerList1.size());
assertEquals(1, (int) integerList1.get(0));
assertEquals(3, (int) integerList1.get(2));
// 或者
String array[]= {"hello", "world"};
List<String> list = new ArrayList<String>(Arrays.asList(array));
// 这种操作,返回的一个静态内部类,少了一些方法,例如 add,remove
java.util.Arrays.ArrayList<String> list = Arrays.asList(array);
|