Java中为何foreach循环输出数组元素,普通for循环却输出地址?
问题解析:普通for循环打印数组地址而非元素的原因
问题根源
你在普通for循环的打印语句里犯了一个简单的错误——你打印的是整个数组对象z,而不是数组的第i个元素z[i],这就是两种循环输出结果不一致的核心原因。
为什么会输出地址?
Java里所有数组都是Object的子类,当你直接打印数组对象时,默认调用的是Object类的toString()方法,输出格式为[类型标识@哈希码]:
[I代表这是一个int类型的数组@后面的字符串是数组对象的哈希值
所以你在普通for循环里循环6次,每次都打印整个数组对象,自然会重复输出同一个地址。
为什么foreach循环正常?
foreach循环的语法for (int i : z)中,变量i是直接迭代数组z中的每一个int类型元素,System.out.println(i)会调用Java为int类型专门提供的println(int)重载方法,直接输出整数的数值,所以能得到正确的元素值。
修正后的代码
把普通for循环里的打印语句改成z[i]即可:
public class ArrayReturn { public static int[] Multi(int []a) { for (int i = 0; i < a.length; i++) { a[i] = a[i]*2; } return a; } public static void main(String[] args) { int ar[] = {2,3,4,5,6,7}; int z[] = Multi(ar); // 修正:打印数组的第i个元素z[i] for (int i = 0; i < z.length; i++) { System.out.println(z[i]); } for (int i : z) { System.out.println(i); } } }
修正后的输出会是:
4 6 8 10 12 14 4 6 8 10 12 14
内容的提问来源于stack exchange,提问作者H D VIVEK
相关产品推荐
相关产品推荐

