黑马程序员技术交流社区

标题: java中没有指针,如何实现传地址操作 [打印本页]

作者: 赵许星    时间: 2013-10-31 14:08
标题: java中没有指针,如何实现传地址操作
程序如下:
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中又没有指针,怎么就实现了传地址操作
作者: ixiangfeng    时间: 2013-10-31 14:28
JAVA中的引用变量就是相当于C中的指针,传地址就是直接定义一个相应的引用变量,然后对其进行赋值即可
作者: 王东    时间: 2013-10-31 16:17
定义了一个引用变量,就相当于在堆内存开辟了空间,然后生成地址传到栈内存,传递事物的对象,就是传递指针
作者: 赵许星    时间: 2013-10-31 19:37
王东 发表于 2013-10-31 16:17
定义了一个引用变量,就相当于在堆内存开辟了空间,然后生成地址传到栈内存,传递事物的对象,就是传递指针 ...

为啥要学云7,和andorid哪一个前景更好啊??初学,请教
作者: 汪洋大海    时间: 2013-10-31 21:41
赵许星 发表于 2013-10-31 19:37
为啥要学云7,和andorid哪一个前景更好啊??初学,请教

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

看自己爱好吧哥们,在黑马,学云和android都有前途
作者: 陈家林    时间: 2013-11-1 02:24
晕啊,jdk包就有,例如链表等,你学java数据结构就有用到 ok
作者: 陈家林    时间: 2013-11-1 02:24
{:soso_e127:}
作者: 陈家林    时间: 2013-11-1 02:24
{:soso_e142:}
作者: 赵许星    时间: 2013-11-1 09:44
文涛 发表于 2013-10-31 21:48
java并非真正没有指针,只是这个指针被很好的隐藏起来,不能被你更改和看见,其实当new出一个对象后,系统 ...

"但是这种传参任然是传值调用,并不是c++中的引用,要注意这点,这是不同的"
这句话中,仍然是传值,那结果就是传值的结果了?
作者: 零下五度的水    时间: 2013-11-1 11:17
c&c++ 的指针是直接通过直接访问内存地址实现的
java 将指针做了封装处理,只能进行已经被封装好的操作
你这种属于最常用的修改堆内的值的操作,必然是要被所有语言实现的啊
相比 c&c++,Java在运行效率上有一定的折扣,而且无法自定义访问内存的方法,
但避免了大量的Bug产生和资源浪费,属于傻瓜式程序语言




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2