问题如上,是不是Java不能像C++一样使用指针或引用来实现这个,
好像Java可以使用引用来实现对类的修改,但像String、Integer等不能实现
是不是这几个类机制和一般类不一样,我不大懂,请教先

解决方案 »

  1.   

    你所说的修改传入的参数的值,一般不就是指用=来操作么。
    比如 i=5 ,Str = "String"  ,MyObject = new MyObject();本质都是类似这样的.
    那么类似 i = 5 ,简单类型,你把它做参数,java是复制一个它的值过去,所以你在方法里再怎么改也只是改克隆品.
    那么 str = "String"呢,这句其实只做了一件事,就是把str这个指向String类型的引用指向了新的String对象“String”。那么它对你str原来引用那个String有什么实际改变么?没有。
    而且最重要的是,你在原来的方法里的str现在还是指向原来的值。为什么呢?因为java在传方法参数的时候,他传得是值。也就是说java把你原来的str这个引用复制了一份。然后当参数传进去了。所以,你在方法体里把str指向改变了,对原始的str无影响。
    那么到底什么时候能通过传入的参数改变对象自己呢?你这样考虑,原始的str和新复制的str他们有什么共同点?那就是他们都指向原来的“oldString”这个对象。所以,只能是通过“oldString”这个对象自己提供的方法来改变它。这不就是封装么?你str又不是String,你只是一个引用,怎么可能通过一个=操作,就把人家一个对象改变呢?要想变就给用人家对象自己提供的方法来变。
    -------------------------------------------------------------------
    废话太多了,我自己都受不来了。总之一句话,java里面,所谓的引用,它的作用只能是提供个标志让你在代码里面引用。他不能去操作对象。要想操作对象,前提是对象自己提供方法。
      

  2.   

    Java passes primitives by value (no argument there), but objects are passed by reference.
    建议楼主看一下thinking in java的Passing & Returning Objects章节
      

  3.   

    Java对原始数据类型的变量是操作类似C语言的传值调用,对引用类型的变量操作类似于C语言的引用调用,如果要对引用变量作修改,就必须在方法里始终操作传入的变量,而不对该变量赋予新的对象
      

  4.   

    这个我知道一点,但像Integer、Charater、String; int, char等这些就没法改变吗?
    这样说的话很不方便的
      

  5.   

    String,Integer不能改,是因为它们根本就没有提供可以修改成员数据的方法。除非你另外创建一个对象。
    int,char不能改,是因为传值调用,改掉的是副本。