Java自动装箱和拆箱问题

时间:2018-01-11 11:53:33

标签: java

Java编译器负责转换原始数据类型及其包装类。但我怀疑的是,尽管java编译器本身执行类型转换,但为什么当我尝试将Array转换为ArrayList时它会输出错误使用int数组作为参数。像:

int[] val = {1,2,3,4,5};
ArrayList<Integer> newval = new ArrayList<Integer>(Arrays.asList(val));
  

错误:找不到ArrayList(List<int[]>)

的合适构造函数

为什么编译器没有将int转换为Integer?

5 个答案:

答案 0 :(得分:2)

您可以使用IntStream来帮助您进行拳击&#34;原语

int[] a = {1,2,3,4};
List<Integer> list = IntStream.of(a)
        .boxed()
        .collect(Collectors.toList());

这将迭代数组,将int加入Integer,然后您只需将Stream收集到List Collectors <!DOCTYPE HTML> <head> <title>Szafranowka - Apartments & Restaurant </title> <meta name="viewport" content="width=device-width", initial-scale=1"> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <link rel="stylesheet" href="style.css" type="text/css" /> <link href="https://fonts.googleapis.com/css?family=Tangerine" rel="stylesheet"> <style> body { padding: 0; margin: 0; height: 100vh; width: 100vw; } #container { width: 100%; height: 100%; } #background { width: 100%; height: 100%; position: absolute; opacity: 0.5; filter: blur(3px); filter: contrast(50%); filter: brightness(30%); } #background img { display: block; width: 100%; height: 100%; object-fit: cover; } #header { position: absolute; z-index: 1; font-family: 'Tangerine', cursive; text-align: center; color: #9F5F9F; font-size: 70px; display: table-cell; vertical-align: middle; width: 100%; text-shadow: 2px 2px #660055; } #header h2 { margin-bottom: -30px; } #entrance span { border: 1px solid; padding: 15px; } </style> </head> <body> <!-- Główny DIV całej strony --> <div id="container"> <!-- Lewa część tła strony, zamknięta w divie --> <div id="background"> <img src="background.jpg"> </img> </div> <div id="header"> <h2>Szafranowka</h2> <p>Apartments & Restaurant </p> <br></br> <h5 id="entrance"><span>Wejscie/Entrance</span></h5> </div> </div> </body> </html>

答案 1 :(得分:1)

您无法创建ArrayList<primitive types>来源:why you can't create a Arraylist of primitive types。而是使用适配器类:

class Adapter{

private int[] value;

adapter(int[] value){

this.value = value;
 }
 public int[] getValue(){
 return value;
   }
  }

然后将其添加到ArrayList<Adapter> AL = new ArrayList<>();

答案 2 :(得分:0)

这里没有自动装箱;也许你打算这样做:

Integer[] val = {1,2,3,4,5};

答案 3 :(得分:0)

int[] val = {1,2,3,4,5};

对于原始数组:

List<int[]> vv = Arrays.asList(val); 

将获取数组列表,因为当我们尝试将原始数组转换为列表时,自动装箱不起作用

对象数组类型:

Integer[] val = {1,2,3,4,5};
List<Integer> vv = Arrays.asList(val); 

编译器将使用自动装箱

答案 4 :(得分:-2)

Arrays.asList接受一个对象数组 - 而不是基元(在很多情况下,编译器足够聪明,可以通过称为自动装箱的东西进行交换 - 在这种情况下不是)。使用简单的循环,您可以将数组的项添加到List