经常听别人谈起Java的安全性,都说是因为Java取消了指针,可是Java的引用不也是给对象起个"名字",然后通过"名字"访问对象吗?本质上跟指针有区别吗?
    
    理解上一直有点模糊,希望前辈们提点。

解决方案 »

  1.   

    java的引用相当与所谓的指针,但是一般说java都是值传递,这里记录就是内存的地址
      

  2.   

    个人觉得java只是取消直接跟内存空间做操作。而本质上引用和指针的用法没啥区别。
      

  3.   

    首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的"GOTO"语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上每一个new 语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个"指针",更不用象在操作C++的指针那样胆战心惊。2楼非也, 
    基本类型数据存放在Stack中,存放的是数据。而产生对象时,只把对象的reference存放在stack中,用于指向某个对象,对象本身存放在Heap中。
    还有, 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。
      

  4.   

    其实java中到处都是指针,只是形式不同而已
      

  5.   

    五楼非也,JAVA中引用和指针虽然差不多,但是有区别的。
      

  6.   

    从实现上来讲,引用可以理解为一种受限的指针,引用底层可以采用指针来实现,也可以采用句柄的方式实现。早期jvm一般采用句柄的方式,现在的jvm,比如sun的,IBM的,一般就是用指针来实现。
    不过从语言的角度来将,没有必要把java的引用和C的指针来比较。
      

  7.   

    还有,java中的引用只能指向对象。
    指针可以指向函数(方法),指向指针,指向基本类型数据。
      

  8.   


    当然有区别A a=new A();
    你可以 a=a+1;吗?  指针就可以
      

  9.   

    Java语言没有指针。
    你不信啊?
    你用你所谓的“Java指针”编写出一个二叉树试试?注意:叶子节点要复位空指针噢。
      

  10.   

    Java语言没有指针。
    你不信啊?
    你用你所谓的“Java指针”编写出一个二叉树试试?注意:叶子节点要赋为空指针噢。
      

  11.   

    Java语言没有指针。
    你不信啊?
    你用你所谓的“Java指针”编写出一个二叉树试试?注意:叶子节点要赋为空指针噢。
    你用你所谓的“Java指针”编写动态生成一个链表试试看?
    你用你所谓的“Java指针”编写出一个数据/信息管理系统试试看。注意:不准调用数据库,除非你有本事亲自用Java语言编写出一个“自创”的数据库。