Java数组输出异常:运行程序后显示[I@4554617c如何解决?
嘿,这个问题我之前也碰到过!你看到的[I@4554617c其实是Java数组默认的toString()输出结果,我来给你拆解下:[代表这是一个数组,I表示数组元素是int类型,@后面的十六进制数是数组对象的哈希码。这是因为你直接打印数组对象时,Java调用的是Object类的toString()方法,它并不会帮你把数组里的具体元素输出出来。
下面给你几个解决办法,按需选择:
方法一:用Arrays.toString()(最推荐)
这是Java官方提供的最简便的数组打印方式,只需要先导入java.util.Arrays包,然后修改你的打印语句就行。
修改后的完整代码:
import java.util.Arrays; public class Firstlast6 { public static void main(String[] args) { int testnums[] = {6,1,5,3}; firstLast6(testnums); // 替换成Arrays.toString()打印数组内容 System.out.println(Arrays.toString(testnums)); } public static boolean firstLast6(int[] nums){ if (nums[0] == 6){ return true; }else if (nums[nums.length-1] == 6){ return true; }else { return false; } } }
运行后就能输出[6, 1, 5, 3],完全符合你的预期。
方法二:手动遍历数组打印
如果不想额外导入包,也可以自己写循环遍历数组元素,自定义输出格式:
public class Firstlast6 { public static void main(String[] args) { int testnums[] = {6,1,5,3}; firstLast6(testnums); // 手动遍历打印 System.out.print("["); for (int i = 0; i < testnums.length; i++) { System.out.print(testnums[i]); if (i != testnums.length - 1) { System.out.print(", "); } } System.out.println("]"); } // 原firstLast6方法不变 public static boolean firstLast6(int[] nums){ if (nums[0] == 6){ return true; }else if (nums[nums.length-1] == 6){ return true; }else { return false; } } }
这种方式适合需要自定义输出样式的场景,比如去掉方括号或者调整分隔符。
方法三:Java 8+ 用Stream API
如果你使用的是Java 8及以上版本,还可以用Stream来输出数组元素:
import java.util.Arrays; public class Firstlast6 { public static void main(String[] args) { int testnums[] = {6,1,5,3}; firstLast6(testnums); // Stream方式打印 System.out.print("["); Arrays.stream(testnums) .forEach(num -> System.out.print(num + (num != testnums[testnums.length-1] ? ", " : ""))); System.out.println("]"); } // 原firstLast6方法不变 public static boolean firstLast6(int[] nums){ if (nums[0] == 6){ return true; }else if (nums[nums.length-1] == 6){ return true; }else { return false; } } }
另外提一句:你的firstLast6方法返回了一个boolean值,但main方法里调用时没有接收或打印这个结果,如果需要看到方法的判断结果,可以加一句System.out.println(firstLast6(testnums));,这样就能知道数组首尾是否包含6了。
内容的提问来源于stack exchange,提问作者Sekhar
相关产品推荐
相关产品推荐

