首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么while (arar==arr){ arr[0]=2;}的输出显示这个([I@60e53b93)?[复制]

这个问题涉及到Java中的数组和对象引用。首先,我们来解释一下为什么会出现([I@60e53b93)这样的输出。

基础概念

  1. 数组:在Java中,数组是一种数据结构,用于存储固定大小的相同类型元素。
  2. 对象引用:在Java中,数组是对象,因此它们有内存地址。当你打印一个数组时,实际上打印的是数组对象的引用(即内存地址),而不是数组的内容。

问题分析

代码语言:txt
复制
while (arar == arr) {
    arr[0] = 2;
}

这段代码的意图可能是想检查两个数组是否相等,然后在它们相等的情况下修改第一个元素的值。然而,这里存在几个问题:

  1. 变量名错误arar应该是arr的一个副本或者另一个数组。如果arar未定义,会导致编译错误。
  2. 数组比较:在Java中,==比较的是对象引用,而不是数组的内容。即使两个数组的内容相同,它们的引用也可能不同。

解决方法

如果你想比较两个数组的内容是否相等,可以使用Arrays.equals()方法。如果你想在两个数组内容相等的情况下修改第一个元素的值,可以这样做:

代码语言:txt
复制
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        int[] arrCopy = Arrays.copyOf(arr, arr.length);

        while (Arrays.equals(arr, arrCopy)) {
            arr[0] = 2;
            System.out.println(Arrays.toString(arr));
        }
    }
}

解释

  1. 创建数组副本:使用Arrays.copyOf()方法创建一个数组的副本。
  2. 比较数组内容:使用Arrays.equals()方法比较两个数组的内容。
  3. 修改数组元素:在两个数组内容相等的情况下,修改第一个元素的值。

输出

代码语言:txt
复制
[2, 2, 3]
[2, 2, 3]
...

每次循环都会修改arr的第一个元素为2,并打印出修改后的数组内容。

参考链接

通过这种方式,你可以正确地比较数组的内容并在满足条件时修改数组元素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 欧拉计划——方阵中的最大乘积

    08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

    03

    Java集合类详解

    上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。 发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。也就是说如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。 还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作流昂大大降低。

    01
    领券