java里没有了指针,用户不能随便访问地址,但是也没有意义!因为1 
c语言里面,虽然指针可以随便访问,但是一个程序是只能访问自己的进程空间地址的,是无法访问其他程序的地址空间的,所以指针程序不会对其他程序造成影响。因为2 java里虽然没有指针,但是有引用,引用照样可以造成跟指针一样的错误,那就是访问空引用,如果没有try,照样会崩溃。
没有指针的唯一的好处好像就是是,程序不会误修改属于自己的内存空间的东西了。但是,引用一样可以到处乱指。所以我还是没有明白,java没有了指针所能避免的错误是什么。是不是可以这么理解,java少了指针,只是少了一个容易引起错误的语言特性,但是这些错误并没有因为少了个这个特性而不会发生。

解决方案 »

  1.   

    Too naive, sometimes simple!
      

  2.   

    java vm对引用进行管理,比如有垃圾回收机制.
    在c里面这些工作都需要程序员去做.
    我觉得就是方便.
      

  3.   

    Java的引用并不能象C的指针那样随便去访问内存,引用只是,引用一个已经声称的对象,因此不存在什么内存溢出的事情.但C语言的指针却会.
      

  4.   

    引用怎么不能随便访问内存?String str1="abc";String str2="def";str1=str2;str1="dddddddddd";这个时候,str1修改的就已经是不是自己原先"引用"的内存了。另外一个,string str=obj.fun();
    str.length(); 这个时候如果obj.fun返回的是null,如果这儿没有被try,程序照样会崩溃。
      

  5.   

    我不明白引用可以随便访问内存是个什么概念
    C的指针,可以指到任意一段内存(许可的范围),因此可以利用这个特点制造溢出
    Java的引用,只是能引用JVM构造的一系列对象,如何能随便引用内存?
    你举的例子,只是表明,str1重新引用了一个常量,而常量是在ConstantPool里预先初始化好的串,怎么能表明str1可以随心所欲地引用其他的内存区域?
    如果在编程时,发生了NullPointException只能表明你的程序有Bug,语言如何能给你保证不能出现NullPointerException?
    另,是否出现NullPointerException是你程序设计的时,跟语言的设计没有关系
      

  6.   

    Java取消了指针并不是为了防止NullPointerException的发生,没有了指针就消除了程序运行的不确定性,消除了必须手动释放堆空间的烦琐步骤,又不是为了防止NullPointerException.再说NullPointerException是可以捕获的,怎么能说程序就崩溃了?如果C里面出现了越界,那才叫崩溃.可以捕获的,永远不叫崩溃,不可以捕获的才叫崩溃.
      

  7.   


    C中的指针会因为一些偏移操作而修改了其他的数据
    而引用是在自己合法的返回内部进行操作!而java中的null你完全可以理解为一个对象,调用一个没有任何方法的对象当然会出错~其他的不与解释~楼主慢慢会明白~
      

  8.   

    chen77716(tony) 说的有道理。
    null的话,说明这个对象压根就不存在,访问它的方法,失败是必然的。不是什么指针乱指的问题。
      

  9.   

    chen77716(tony)  说的很清楚了 学过c的人应该知道和java在这方面的区别
      

  10.   

    java不赞成你去访问java底层的东西,引用当然指向的是堆(也可理解为内存)中的对象,只是这个引用是不可计算的,全由jvm替你管理,这是和C指针最大的不同,如果要说引用不用try能让程序崩溃,归根到底是语言编写规范问题,迄今为止没有那个语言,能让开发者随意使用everythings而不会崩溃。
      

  11.   

    upjava居然不能在方法内改变参数的值,只能改变参数的指向。那我想一个入参,5个出参怎么办?