首页
学习
活动
专区
工具
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,并打印出修改后的数组内容。

参考链接

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

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

相关·内容

C语言内存函数超详解

这个函数在遇到'\0'的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的。...,和arr的数据一样了,那么第二次复制时,复制给 arr+2 的数据就也是 arr 的数据了,显然这样不行。...按照上面的思路,我们来分析一下这个代码: memmove(arr, arr + 1, 9 * sizeof(int)); 如果按照上面的思路从后往前复制,会是什么样的?...第一次复制是将 arr+9 位置的数据复制到 arr+8 ,第二次复制是将 arr+8 的数据复制到 arr+7 ,你看,之前的问题又出现了,arr+7 位置的数据和 arr+9 的数据一样了。...\n", buffer1, buffer2); return 0; } 输出结果: 4. 2 memcmp 的模拟实现 思路基本和 strcmp 一致,只是多了一步强制类型转换,这里不再赘述。

7510
  • 高度注释扫雷程序~免费源码

    ,输出操作次数 如果失败则会有一段简单的动画,输出操作次数,以及剩余没找到的地雷位置与个数。...失败和胜利界面:    - `lose`函数显示失败时的动画和棋盘状态。    - `failed_interface`函数显示失败时的结算界面。    ...流程图 地雷提示字生成 数组生成 别问我为什么这张画风不一样,因为换软件了awa 用户输入模块 游玩输出模块 代码~复制即玩~~ ps:由于是使用VS实现,采用了scanf_s函数,...);Sleep(3000); printf("输入0 2 2试试\n");Sleep(3000); while (test1 !...printf_play(arr); printf("太棒了,你找到了所有地雷,通过了这个特别简单的教学关卡\n");Sleep(5000); printf("选择开始游戏,你可以自定义难度,挑战更高难度的关卡

    4310

    PHP 笔试 + 面试题

    } print_r($arr); // Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7]..., 7]; quickSort($arr, 0, 9); print_r($arr); // Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4...wc -l [统计系统已成功登录的用户个数] grep/egrep [0-9] 1.txt [在文件中查找满足正则式的字符串] ls -l [长格式的形式显示文件内容] cp file1 file2 dir...[将文件复制到目录中] cp -r dir1 dir2 [复制目录] mv 1.txt 2.txt [移动文件并重命名] rm file1 file2 [删除文件] find ver1.d ver2....[2] 说说你做过的最得意的项目或者个人开发作品(可以是个人作品,也可以是合作项目) 这个,你猜... [3] 假设给你5台服务器,请大致的描述一下,如何使用你所熟悉的开源软件,搭建一个日PV 300

    3.1K51

    分享一些常用的 JS 基础面试题

    const arr = [1, 2, 3] arr.unshift(0) console.log(arr) // [0, 1, 2, 3] 复制代码 4.shift() 在头部弹出数据,原数组会变。...这个方法会改变原始数组,数组的长度会发生变化 const arr3 = [1, 2, 3, 4, 5, 6, 7, "f1", "f2"]; const arr4 = arr3.splice(2, 3)...substr和substring这两个方法不同的地方就在于参数二,substr的参数二是截取返回出来的这个字符串指定的长度,substring的参数二是截取返回这个字符串的结束点,并且不包含这个结束点。...(str.search(reg)) // 输出 0 这里搜索到的第一项是从位置0开始的 复制代码 10.toLowerCase(),toUpperCase() toLowerCase把字母转换成小写...) console.log(str[i]) } 复制代码 2.while() / do while() while、do while主要的功能是,当满足while后边所跟的条件时,来执行相关业务

    72220

    初识C语言·字符(串)函数

    那知道了strcpy是用来复制字符串的,并且会复制斜杠0,且不希望修改被复制的字符串的内容,我们就可以开始模拟实现了。...0; } 这是最基础的写法,为什么基础呢?...有个值得注意的点就是这个函数复制的时候是斜杠0在哪里就从哪里开始复制,如果复制的是\0提前了也就不会继续复制了。 那么基本原理我们知道了现在来实现这个函数。...相减就是0,取反了就是1,while循环继续下去,循环体内的内容就是s1++,s2++,最后跳出循环的时候判断一下s2指向的内容是不是'\0',如果是的话,返回这个时候的字符1中的临时变量,最后如果整个...,也就是没有错误,所以我们现在想main函数为什么要返回0,为什么C语言认为返回0就是程序正常,就是因为这个咯。

    8210

    Java学习笔记之字节缓冲流&字符流&IO流练习

    0x01 字节缓冲流 1.1 字节缓冲流构造方法 字节缓冲流介绍     BufferOutputStream:该类实现缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节频繁调用系统底层...字符流 2.1 为什么会出现字符流 字符流介绍     由于字节流操作中文不是特别的方便,所以Java提供了字符流     字符流=字节流+编码表 中文的字节存储方式     用字节流复制文本文件时,...,用于显示现代英语,主要包括控制字符(回车键、退格、换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号)     基本的ASCII字符集,使用7位表示一个字符,共128字符。...\\text2.txt")); // 遍历集合,得到每一个字符串数据 for(String s: arr) { // 调用字符缓冲输出流对象的方法写入文件...(s1); arr.add(s2); arr.add(s3); arr.add(s4); // 创建字符缓冲输出流对象

    53830

    初识C语言·内存函数

    前面讲的字符串函数是专门干关于字符串的事的,而这个函数可以干strcpy一样的事,但是区别就是它碰到\0也会继续复制。...9); for (int i = 0; i < 10; i++) { printf("%d ", arr2[i]); } return 0; } 这串代码的意思就是从arr1[4]开始给arr2...我们首先想为什么使用内存函数需要考虑空间是否重叠,这是因为如果重叠了就会导致内存复制的时候复制过去上一次复制留下的元素,那么解决方案是什么?是单独拿一块空间出来存储要存放的元素吗?...这个实际上可以,但是不免会浪费挺多空间。较好的办法就是改变复制的顺序,如下。...这个函数的功能就是把内存中的值设置成自己想要的值,那有人问了,为什么第二个参数是int类型的,这是因为字符在计算机中实际上是以AscII值的形式读取的,所以参数类型是int类型。

    9810

    快速入门JavaScript(一)

    基本语法 2.1、注释 单行注释 // 注释的内容 多行注释 /* 注释的内容 */ 2.2、输入输出语句 输入框 prompt(“提示内容”); 弹出警告框 alert(“提示内容”); 控制台输出...console.log(“显示内容”); 页面内容输出 document.write(“显示内容”); 2.3、变量和常量 ​ JavaScript 属于弱类型的语言,定义变量时不区分具体的数据类型。...定义格式 let 数组名 = [元素1,元素2,…]; let arr = [10,20,30]; 索引范围 从 0 开始,最大到数组长度-1 数组长度 数组名.length for(let i = 0...数组高级运算符… 数组复制 //复制数组 let arr2 = [...arr]; //遍历数组 for(let i = 0; i arr2.length; i++) { document.write...arr4 = [...arr2 , ...arr3]; //遍历数组 for(let i = 0; i arr4.length; i++) { document.write(arr4[i] + "<

    83240

    抽丝剥茧C语言(初阶 中)

    ); return 0; } arr1[] arr2[] arr3[] 这个东西叫做数组,你先当它是储存字符串的变量就好了,关于数组后面会说。..."%c",‘A’+2); 输出结果为 C 因为字符A的ASCII的值是65,加上2之后是67,67对应ASCII表我们发现其实是字符C,然后我们又用%c(这是打印字符的)的形式打印出来,所以打印的是...“我要继续努力敲代码这句话”); 就算复制粘贴都需要很久,所以要让你的编译器帮你完成这个任务!...\n"); } return 0; } 我把条件改成了0,输出结果如下: 果然,原来的2万行现在一行没有. 4.函数 函数我们已经接触一点点了,比如main函数printf函数,当然它可不是我们认知的数学那些函数..."%d ", arr[7]); printf("%d ", arr[8]); printf("%d ", arr[9]); return 0; } 有人问,为什么printf函数后面为什么这么写

    68500

    C语言-----字符串函数(1)

    1.函数功能参数介绍 该函数的功能就是把一个字符串复制到另外的一个数组,包括'\0'; 2.首先我们要明确字符串的复制也是包括最后的\0的; void mystrcpy(char* dest, char...world"; char arr2[20] = "xxxxxxxxxxxxxx"; mystrcpy(arr2, arr1); printf("%s\n", arr2); return 0;...} 跳出while循环之后就会把末尾的\0实现复制; 3.继续优化---------------------------------------------- 我们阅读上面的资料就会发现strcpy的返回值就是...printf("%s\n", arr2); return 0; } 这里面让while循环语句里面的内容变得更加精炼,把其实现的部分放到了判断条件里面; 解引用操作符不会作用于加加,这样指针继续向后移动...,和%zd差别不大; return 0; } 资料显示,strlen的返回类型是size_t,这个是位sizeof设计的一个类型,是unsigned int 或者是 unsigned long类型,所以我们把

    4000

    前端面试高频20道手写题

    ;}flatten(arr); // [1, 2, 3, 4,5]复制代码(2)reduce 函数迭代从上面普通的递归函数中可以看出,其实就是对数组的每一项进行处理,那么其实也可以用reduce 来实现数组的拼接...flatten(next) : next) }, [])}console.log(flatten(arr));// [1, 2, 3, 4,5]复制代码(3)扩展运算符实现这个方法的实现,采用了扩展运算符和...some 的方法,两者共同使用,达到数组扁平化的目的:let arr = [1, [2, [3, 4]]];function flatten(arr) { while (arr.some(item...delete context.fn; return result;};复制代码实现字符串的repeat方法输入字符串s,以及其重复的次数,输出重复的结果,例如输入abc,2,输出abcabc。...:var arr = [1,2,3,4,5,6,7,8,9,10];let length = arr.length, randomIndex, temp; while (length) {

    35630

    【简单理解化】 内存函数及它的模拟实现

    src:指向源内存块的指针。 n:要复制的字节数。 这个函数在遇到 '\0' 的时候并不会停下来 该函数不检查内存块重叠,如果强行叠加复制,结果未定义。...[] = {0,1,2,3,4,5,6,7,8,9,10}; int arr2[20] = { 0 }; memcpy(arr2, arr1+2, 20);//字节的个数,返回的目标空间的起始地址...0 }; my_memcpy(arr2, arr1 + 2, 20); return 0; } for循坏和while循环选择一个即可。...[] = { 0,1,2,3,4,5,6,7,8,9,10 }; // int arr2[20] = { 0 }; // memmove(arr1+2, arr1, 20); // // return...0; //} 我们打开监视界面观看一下: 我们分析一下为什么会产生这样的结果 这是目前的效果图,但是如果将src从前拷贝,造成循环的现象,因为当从arr+3的位置开始复制时,数字已经变成了1。

    4310

    JavaScript—网络编程(3)-Object、String、Array对象和prototype属性

    注意 toLocaleString 只用来显示结果给用户;不要在脚本中用来做基本计算,因为返回的结果是随机器不同而不同的。...objectName.prototype objectName 参数是对象的名称。 JS是基于对象的,用对象的时候都是临时去读取复制原型的,这个属性,就是改变那个原型的。...= "abc123"; println( str2 ); println( str2.reverse() );//字符串反转输出 stringtools.js...arr.push("x1",arr2,"x2");//注意1,arr2在arr当中是一个元素---即arr变成二维数组。注意2,push方法会改变原来的数组。...arr长度为:9 arr=arr.concat("y1",arr2,"z1"); //注意1,该方法会把数组arr2当中的每个元素取出来,分别添加到arr当中---arr还是一维数组 //注意2,concat

    36910
    领券