大家帮我看看这段代码是怎么执行呢?

meiqianmeifang 2008-04-30 10:28:42
int[] a1={1,2,3,4,5};
int[] a2;
a2=a1;
for (int i=0;i<a2.length;i++)
a2[i]++;
for (int i=0;i<a1.length;i++)
System.out.println("a1["+i+"]="+a1[i]);


到底是怎么执行呢?

运行的结果是:
a1[0]=2
a1[1]=3
a1[2]=4
a1[3]=5
a1[4]=6

为什么是a1[0]=2呢?我实在搞不懂
...全文
107 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pangyusheng 2008-04-30
  • 打赏
  • 举报
回复
a1和a2数组的引用是相同的.所以你对a2的操作,对a1也是起作用的.
给你举一个例子:
假如你们家就你和你的妻子.住在一个房间里.你和你妻子都有开这个门的钥匙.
当你妻子用钥匙打开你的门,把房间收拾了一下,等你回家,用钥匙打开门口,发现是收拾完的房间
你就是:a1
你妻子是:a2
钥匙:内存的引用(地址)
房间:内存空间
jack462 2008-04-30
  • 打赏
  • 举报
回复
a2引用a1的地址。指针指向同一个地址,
raigor235 2008-04-30
  • 打赏
  • 举报
回复
楼上说的都正确!!帮你顶一下!!
dreamhyz 2008-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 anqini 的回复:]
两个引用指向同一个地址,即使一个改变那地址的内容,另一个也受影响,假如你clone的话就不发生这种事了!

原因是 数组是 obejct!
[/Quote]
zhenglimv 2008-04-30
  • 打赏
  • 举报
回复
力争成为中国最大的架构师群联盟,架构师1群:43545919已满,2群:59048426的招募也近尾声,现3群:17303696正式开放,各群内容基本相同,高手也经过群主进行了调整,希望大家不必重复加入!培训经过筛选才会进行,请大家不必着急!!!

已经上传的顶级软件产品的架构分析,本群资料仅供研究学习,不得商用!!!
google 、
eBay、
Youtube、
淘宝等
......
技术文章包括:
《自己动手写操作系统》
《搜索引擎-原理、技术与系统》
《企业应用架构模式》
......
重要的RUP实例
设计模式精解
......
资料陆续上传中
zhenglimv 2008-04-30
  • 打赏
  • 举报
回复
力争成为中国最大的架构师群联盟,架构师1群:43545919已满,2群:59048426的招募也近尾声,现3群:17303696正式开放,各群内容基本相同,高手也经过群主进行了调整,希望大家不必重复加入!培训经过筛选才会进行,请大家不必着急!!!

已经上传的顶级软件产品的架构分析,本群资料仅供研究学习,不得商用!!!
google 、
eBay、
Youtube、
淘宝等
......
技术文章包括:
《自己动手写操作系统》
《搜索引擎-原理、技术与系统》
《企业应用架构模式》
......
重要的RUP实例
设计模式精解
......
资料陆续上传中
zhenglimv 2008-04-30
  • 打赏
  • 举报
回复
力争成为中国最大的架构师群联盟,架构师1群:43545919已满,2群:59048426的招募也近尾声,现3群:17303696正式开放,各群内容基本相同,高手也经过群主进行了调整,希望大家不必重复加入!培训经过筛选才会进行,请大家不必着急!!!

已经上传的顶级软件产品的架构分析,本群资料仅供研究学习,不得商用!!!
google 、
eBay、
Youtube、
淘宝等
......
技术文章包括:
《自己动手写操作系统》
《搜索引擎-原理、技术与系统》
《企业应用架构模式》
......
重要的RUP实例
设计模式精解
......
资料陆续上传中
fzk2015 2008-04-30
  • 打赏
  • 举报
回复
同意楼上
数组属于引用数据类型。a2=a1; 这句实际上是传递的引用(首地址和长度),所以两数组指的是同一段内存。对a2的操作实际上也是对a1的操作。
anqini 2008-04-30
  • 打赏
  • 举报
回复
两个引用指向同一个地址,即使一个改变那地址的内容,另一个也受影响,假如你clone的话就不发生这种事了!

原因是 数组是 obejct!
milo-higgs 2008-04-30
  • 打赏
  • 举报
回复
a1和a2都是指向相同的区域的啊

你对a2进行a2[i]++; 这样的操作,实际上就是对数组所指的那片内存进行的操作,而不是地址,所以a1也会发生变化的。
blliy117 2008-04-30
  • 打赏
  • 举报
回复
楼上也解释挺多的,我也稍微吹一下

在java中要充分理解对象这个概念,

其实a1,a2永远都只是一个指针引用,他们引用的是同一个对象,所以不管你改变a1还是a2其实都是改
{1,2,3,4,5}的数组,
因为
a1=a2的时候对象没有被复制!

当然基本数据类型和String类型是会被复制的!
shiling07 2008-04-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cuijie_cn 的回复:]
引用 2 楼 anqini 的回复:
两个引用指向同一个地址,即使一个改变那地址的内容,另一个也受影响,假如你clone的话就不发生这种事了!

原因是 数组是 obejct!

[/Quote]
cuijie_cn 2008-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 anqini 的回复:]
两个引用指向同一个地址,即使一个改变那地址的内容,另一个也受影响,假如你clone的话就不发生这种事了!

原因是 数组是 obejct!
[/Quote]

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧