基本类型和封装类型的转换

文章探讨了在Java中将int类型数据转换为List时遇到的问题,以及不同方式创建支持增删操作的List。通过示例代码展示了Arrays.asList()方法不支持对基本类型数组的修改,而使用Boxed和Stream进行转换可以实现。同时,文章还介绍了如何在List和数组之间进行转换,以及在处理过程中可能出现的类型转换错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 发现问题
int 类型的数据没有转成数组,而是输出了对象地址
        System.out.println("test");
        int[] x = {1, 2, 3, 4, 5, 6, 7};
        List listX = Arrays.asList(x);
        List listX1 = new ArrayList();
        listX1.add(1);
        listX1.add(2);
        listX1.add(3);
        listX1.add(4);
        listX1.add(5);
        listX.forEach(System.out::print);///为什么没有输出?而是输出一个对象
        System.out.println("***********");
        listX1.forEach(System.out::print);
        System.out.println();

 输出:

test
[I@4e50df2e***********
12345

        System.out.println("***********方式一:不支持增删");
        String[] str = {"qwe", "zxc"};
        List listStr = Arrays.asList(str);
        listStr.forEach(System.out::println);
//        listStr.add("test"); // 出错
//        listStr.remove("qwe"); // 出错
//        listStr.forEach(System.out::println);

        System.out.println("***********方式二:支持增删");
        List listStr2 = new ArrayList<>(Arrays.asList(str));
        listStr2.forEach(System.out::println);
        System.out.println("***********方式二:开始做增删");
        listStr2.add("test2");
        listStr2.remove("qwe");
        listStr2.forEach(System.out::println);


        System.out.println("***********方式三:支持增删");
        List listStr3 = new ArrayList(str.length);
        Collections.addAll(listStr3, str);
        listStr3.forEach(System.out::println);
        System.out.println("***********方式三:开始做增删");
        listStr3.add("test3");
        listStr3.remove("qwe");
        listStr3.forEach(System.out::println);

        System.out.println("***********方式四:支持增删");
        int[] ints = {1, 2, 3, 4, 5};
        long[] longs = {1, 2, 3, 4, 50000};
        double[] doubles = {1, 2, 30000.001, 4, 5};
        float[] floats = {1f, 2f, 30000.001f, 4f, 5f};

        List<Integer> listInts = Arrays.stream(ints).boxed().collect(Collectors.toList());
        List<Long> listLongs = Arrays.stream(longs).boxed().collect(Collectors.toList());
//        Arrays.stream(floats).boxed().collect(Collectors.toList()); 不支持
        List<Double> listDoubles = Arrays.stream(doubles).boxed().collect(Collectors.toList());



        System.out.println("***********方式四:开始增删");
        listInts.add(66);
        listInts.remove(1);// 和String的差别,String是移除value
        listLongs.add(66l);
        listLongs.remove(1);
        listDoubles.add(66.0);
        listDoubles.remove(1);
        listInts.forEach(System.out::println);
        System.out.println("*************************");
        listLongs.forEach(System.out::println);
        System.out.println("*************************");
        listDoubles.forEach(System.out::println);

        // 回到最初的问题 其实是jdk泛型,没法识别这个基本类型的所以被认为是一个对象。
        List listIntObject = Arrays.asList(ints);
        List listLongObject = Arrays.asList(longs);
        List listFloatObject = Arrays.asList(floats);
        List listDoubleObject = Arrays.asList(doubles);
        listIntObject.forEach(System.out::println);
        listLongObject.forEach(System.out::println);
        listFloatObject.forEach(System.out::println);
        listDoubleObject.forEach(System.out::println);


        List<Integer> listIntegers = new ArrayList<>();
        listIntegers.add(10);
        listIntegers.add(11);
        listIntegers.add(12);
        listIntegers.add(13);

        List<Long> listLongsX = new ArrayList<>();
        listLongsX.add(20L);
        listLongsX.add(21L);
        listLongsX.add(22L);
        listLongsX.add(23L);

        List<Double> listDoubleX = new ArrayList<>();
        listDoubleX.add(30.0);
        listDoubleX.add(31.1);
        listDoubleX.add(32.2);
        listDoubleX.add(33D);

        int[] intArr1 = listIntegers.stream().mapToInt(Integer::intValue).toArray();
        long[] intLong1 = listLongsX.stream().mapToLong(Long::longValue).toArray();
        double[] intDouble1 = listDoubleX.stream().mapToDouble(Double::doubleValue).toArray();
        Arrays.stream(intArr1).forEach(System.out::println);
        Arrays.stream(intLong1).forEach(System.out::println);
        Arrays.stream(intDouble1).forEach(System.out::println);

        int[] intArr2 = listIntegers.stream().mapToInt(Integer::valueOf).toArray();
        long[] intLong2 = listLongsX.stream().mapToLong(Long::valueOf).toArray();
        double[] intDouble2 = listDoubleX.stream().mapToDouble(Double::valueOf).toArray();

        Arrays.stream(intArr2).forEach(System.out::println);
        Arrays.stream(intLong2).forEach(System.out::println);
        Arrays.stream(intDouble2).forEach(System.out::println);

        int[] intArr = listInts.stream().mapToInt(Integer::intValue).toArray();
        long[] longArr = listLongs.stream().mapToLong(Long::longValue).toArray();
        double[] doubleArr = listDoubles.stream().mapToDouble(Double::doubleValue).toArray();

        Arrays.stream(intArr).forEach(System.out::println);
        Arrays.stream(intArr).forEach(System.out::println);
        Arrays.stream(intArr).forEach(System.out::println);

        List listInts1 = Arrays.stream(ints).boxed().collect(Collectors.toList());
        List listLongs1 = Arrays.stream(longs).boxed().collect(Collectors.toList());
//        Arrays.stream(floats).boxed().collect(Collectors.toList()); 不支持
        List listDoubles1 = Arrays.stream(doubles).boxed().collect(Collectors.toList());

        // 以下的方式都会转化出错(编译出错),因为类型没有指定
//        int[] intArr3 = listInts1.stream().mapToInt(Integer::intValue).toArray();
//        long[] longArr3 = listLongs1.stream().mapToLong(Long::longValue).toArray();
//        double[] doubleArr3 = listDoubles1.stream().mapToDouble(Double::doubleValue).toArray();
//
//        int[] intArr4 = listInts1.stream().mapToInt(Integer::valueOf).toArray();
//        long[] longArr4 = listLongs1.stream().mapToLong(Long::valueOf).toArray();
//        double[] doubleArr4 = listDoubles1.stream().mapToDouble(Double::valueOf).toArray();

输出:

***********方式一:不支持增删
qwe
zxc
***********方式二:支持增删
qwe
zxc
***********方式二:开始做增删
zxc
test2
***********方式三:支持增删
qwe
zxc
***********方式三:开始做增删
zxc
test3
***********方式四:支持增删
***********方式四:开始增删
1
3
4
5
66
*************************
1
3
4
50000
66
*************************
1.0
30000.001
4.0
5.0
66.0
[I@254989ff
[J@37f8bb67
[F@20ad9418
[D@439f5b3d
10
11
12
13
20
21
22
23
30.0
31.1
32.2
33.0
10
11
12
13
20
21
22
23
30.0
31.1
32.2
33.0
1
3
4
5
66
1
3
4
5
66
1
3
4
5
66

如上基本数据类型的相互转化,和四种基本类型转成List的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值