A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵许星 中级黑马   /  2013-10-31 14:08  /  12325 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序如下:
public class Test{

           public void changeValue(int[] b){
                                b[2] = 4;
                System.out.print("changeValue:");
                                for(int i = 0; i<b.length;i++)
                                {
                     System.out.print(" "+b[i]);
                                }
}
           public static void main(String[] args) {
                                Test test = new Test();
                                int[] a={1,2,3};
                                test.changeValue(a);
                                System.out.print("\nmain:");
                                for(int i = 0; i<a.length;i++)
                                {
                                        System.out.print(" "+a[i]);
                                }
          }
}


输出:
changeValue: 1 2 4
main: 1 2 4

为啥?java中又没有指针,怎么就实现了传地址操作

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

12 个回复

倒序浏览
JAVA中的引用变量就是相当于C中的指针,传地址就是直接定义一个相应的引用变量,然后对其进行赋值即可
回复 使用道具 举报
定义了一个引用变量,就相当于在堆内存开辟了空间,然后生成地址传到栈内存,传递事物的对象,就是传递指针
回复 使用道具 举报
王东 发表于 2013-10-31 16:17
定义了一个引用变量,就相当于在堆内存开辟了空间,然后生成地址传到栈内存,传递事物的对象,就是传递指针 ...

为啥要学云7,和andorid哪一个前景更好啊??初学,请教
回复 使用道具 举报
赵许星 发表于 2013-10-31 19:37
为啥要学云7,和andorid哪一个前景更好啊??初学,请教

两个方向不一样。没有什么可比性。java学完了做服务端和无线网络比较多吧。
回复 使用道具 举报
java并非真正没有指针,只是这个指针被很好的隐藏起来,不能被你更改和看见,其实当new出一个对象后,系统会在堆中开辟一块内存,并且将内存的首地址给对象名称保存在栈中,其实这个变量可以看做指针,不过被java隐藏并封装起来,我们不能直接的看到和使用指针,在函数参数传递时,你写上了对象名称,而这个名称实际上保存了对象的地址,在传值调用的时候,这个地址被复制给形参,从而使得形参通过这个地址去操作实际对象,但是这种传参任然是传值调用,并不是c++中的引用,要注意这点,这是不同的
回复 使用道具 举报
王东 中级黑马 2013-10-31 23:38:46
7#
赵许星 发表于 2013-10-31 19:37
为啥要学云7,和andorid哪一个前景更好啊??初学,请教

看自己爱好吧哥们,在黑马,学云和android都有前途
回复 使用道具 举报 1 0
晕啊,jdk包就有,例如链表等,你学java数据结构就有用到 ok
回复 使用道具 举报
{:soso_e127:}
回复 使用道具 举报
{:soso_e142:}
回复 使用道具 举报
文涛 发表于 2013-10-31 21:48
java并非真正没有指针,只是这个指针被很好的隐藏起来,不能被你更改和看见,其实当new出一个对象后,系统 ...

"但是这种传参任然是传值调用,并不是c++中的引用,要注意这点,这是不同的"
这句话中,仍然是传值,那结果就是传值的结果了?
回复 使用道具 举报
c&c++ 的指针是直接通过直接访问内存地址实现的
java 将指针做了封装处理,只能进行已经被封装好的操作
你这种属于最常用的修改堆内的值的操作,必然是要被所有语言实现的啊
相比 c&c++,Java在运行效率上有一定的折扣,而且无法自定义访问内存的方法,
但避免了大量的Bug产生和资源浪费,属于傻瓜式程序语言
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马