使用Arrays.sort方法报错:类型不兼容(需int[],找到void)求排查
问题排查与解决
嘿,这个问题我熟!报错的根源是你误解了Arrays.sort()方法的返回值和工作方式——Java里的Arrays.sort()是原地排序方法,它的返回类型是void,不会返回排序后的数组,所以你试图把它的返回值赋值给int[]类型的lengthOfNameSorted时,就会出现“不兼容的类型:需要int[],找到void”的错误。
错误代码的核心问题
你原来的代码里大概率写了类似这样的语句:
lengthOfNameSorted = Arrays.sort(lengthOfName);
这就是问题所在——Arrays.sort()不会返回任何值,它直接修改你传入的数组本身,所以不能用赋值语句接收它的“返回值”。
修正后的代码示例
这里给你两种修正方案,根据你的需求选择:
方案1:保留原数组的顺序(复制后排序)
如果你需要保留lengthOfName数组的原始值,先复制一份再排序:
import java.util.Arrays; static String [] findSpace(int lengthOfName1, int lengthOfName2, int lengthOfName3){ String [] space = {":", ":", ":"}; int [] lengthOfName = {lengthOfName1, lengthOfName2, lengthOfName3}; // 复制原数组到新数组,避免修改原数据 int [] lengthOfNameSorted = Arrays.copyOf(lengthOfName, lengthOfName.length); // 直接对新数组进行原地排序,不需要赋值 Arrays.sort(lengthOfNameSorted); // 这里可以继续使用排序后的lengthOfNameSorted做后续逻辑 // ... return space; }
方案2:直接排序原数组(不需要保留原顺序)
如果lengthOfName数组的原始值对你没用,可以直接排序它:
import java.util.Arrays; static String [] findSpace(int lengthOfName1, int lengthOfName2, int lengthOfName3){ String [] space = {":", ":", ":"}; int [] lengthOfName = {lengthOfName1, lengthOfName2, lengthOfName3}; // 直接排序原数组,排序后lengthOfName就是有序的 Arrays.sort(lengthOfName); // 后续用lengthOfName即可,不需要额外的lengthOfNameSorted数组 // ... return space; }
补充说明
- 别忘了导入
java.util.Arrays包,否则IDE会找不到Arrays.sort()和Arrays.copyOf()方法。 - 原地排序是Java集合框架里很多排序方法的设计思路,目的是节省内存开销,避免创建不必要的新数组。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

