public class PassTest{ float ptValue;

public void changeInt(int value)  //基本类型
{
value=55;
} public void changeStr(String value)//引用类型
{
value= new String("differernt");
} public void changeObjValue(PassTest ref) //引用类型
{
ref.ptValue=99.0f;
} public static void main(String argsp[])
{
String str;
int  val;
PassTest pt=new PassTest();

val=11;
pt.changeInt(val);
System.out.println("Int value is:"+val);//这个结果我知道 

                //2
str=new String("hello");       //引用型
pt.changeStr(str);
System.out.println("Str value is:"+str);
                //3
pt.ptValue=101.0f;       //引用型
pt.changeObjValue(pt);
System.out.println("Pt value is:"+pt.ptValue); 
}
}
 第2个  str--> hello            str-->hello           str-->hello
       value-->hello           value-->different 按照引用性   第3个 pt-->101.0 ptValue           pt--->101.1 ptValue            pt--->101.1  ptValue
                ref-->101.0 ptValue           ref-->99.0 ptValue  但是事实上     pt-->101.0 ptValue          pt--->99.0 ptValue            pt--->99.0  ptValue
             ref-->101.0 ptValue         ref-->99.0 ptValue  
有点不懂 请大家帮忙解答一下

解决方案 »

  1.   

    关于是传参还是传值,看thinking in java后面的附录就有一个很好的掌握了。
      

  2.   

    str=new String("hello"); --->创建1个String对象“hello”,并把它的引用传个str对象
    pt.changeStr(str); --->把str作为参数返回给changStr方法,这时候str是形式参数,你无论怎么改,这个方法执行完了str还是不变,也就是说它的作用域只在方法内部。pt.ptValue=101.0f;     --->ptValue是这个类的类变量(或者你理解成全局变量吧)
    pt.changeObjValue(pt); --->通过该对象的引用调用类方法修改类的内部变量  所以为了好的软件工程思想  要把ptValue设置成private的  这样你就无法直接给ptValue赋值了 要通过类自己的方法来设置值 也就是不让你pt.ptValue=101.0f; 而让你pt.changeObjValue(pt); 
    来修改类变量
      

  3.   

    去我博客看看
    O(∩_∩)O
    http://blog.csdn.net/niuniu20008/archive/2008/09/19/2953785.aspx
      

  4.   

    1、对于原始数据类型,也就是int、 long、char之类的类型,是传值的,假如你在方法中修改了值,方法调用结束后,那个变量的值没用改变。
    2、对于对象类型,也就是Object的子类,假如你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是假如你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
    代码如下:
    public class Tester {
        public static void main(String[] args) {
            int primitive = 2;
            changePrimitive(primitive);
            //primitive的值依然是2
            MyClass myClass = new MyClass();
            changeObject(myClass);
            //myClass仍然指向的是执行changeObject之前的那个对象
            //但是myClass.i等于3了
        }    public static void changePrimitive(int primitive) {
            primitive = 3;
        }    public static void changeObject(MyClass myClass) {
            myClass.i = 3;
            myClass = new MyClass();
        }
    }class MyClass {
        int i;
    }    对于远程调用,无论是什么类型,调用结束后,传入的参数和以前没用任何变化(当然前途是直接调用远程方法,假如中间经过其它的Proxy类或者Facade类,不能保证那些类对对象没用修改)。至于是通过Local接口进行调用的,也应该属于本地调用,和上面说的情况应该是一致的。
      

  5.   

    百度 java的 pass by value就可以了。