java入门总结([新手向]Java的一个新手天坑)
Java新手天坑!
想写一篇新手避坑向的文章很久了 ,最近来到园子 ,终于有机会发表这篇文章了(文笔和技术都不咋地 ,大佬见谅 ,适用于刚入坑没多久的新手群体)
在java中 ,经过一段学习的人对数组操作应该是了如指掌了 ,但是刚刚入门的小白来说 ,数组却存在着一个隐藏的大坑 ,我们先用Python示例一下:
#list.py arr1 = [5418,114514,666] arr2 = arr1 arr1[0] = 1 arr2[0] = 2 print(arr1[0]) print(arr2[0])程序输出结果为:
2
2
哎?
这 ,这不对吧?arr1 和 arr2 明明是两个不一样的列表 ,怎么arr2 改到arr1里了呢?
这是新手很容易遇到的问题 ,我们添加一行代码 ,来验证一下猜想 。
#依旧是list.py print(arr1 is arr2)啥意思呢,is不太常用 ,给大家解释一下 ,就是判断两个变量 、列表(我通常称其为实体,更精确一些)在内存中的地址是否相同 ,如果相同的话 ,我们就知道问题发生的原因了 。
程序输出如下:
2
2
True
果然 ,正是因为内存中的地址一样 ,所以更改arr2时 ,arr1也一同更改了 ,这俩货本质上一毛一样!
可以这么理解 ,数据是内存中的文件 ,arr1和arr2只是快捷方式 。
我们把代码在java里实现:
public class ListTest { public static void main(String[] args) { int[] a = {1,2,3}; int[] b = a; a[0] = 10; b[0] = 11; System.out.println(a[0]); System.out.println(b[0]); } }一开始的内存如图所示:
后来arr1把114514位置的值修改为了10
最后arr1把114514位置的值修改为了11
最后二者的[0]都为11
你 ,学废了吗?
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!