JAVA中的一个小问题

2025-01-02 09:13:34
推荐回答(6个)
回答1:

楼主其实我以前也范过你这种迷糊,其实java是传引用的,那么它传来的引用,在引用它的方法中改变它的值,实际的值不应该会被改变的,假设我改一下代码用你的直接传递的参数obj.x重写一下
假如public static void change(int x)
{
x=3;

}
假设这样调用
public void static main(String arg[])
{
A obj=new A();
int a=obj.x=5;
change(a);
System.out.println(a);
}
楼主你会认为打印的a的值是3对吗,那你就大错特错了,其实不然因为java的方法是传那个参数的副本所以你在方法里面怎么改变都不会改变它的现实中的值,所以要传个对象做参数,虽然这个对象也是副本,但是它的属性x和实际属性的x的物理地址(在内存中的存储地址是一样的),就是说
如果方法传的是obj的话那么obj.x和实际obj的属性x是同一个参数,而不是副本,所以如果你要确实改变某个对象中参数的值,一定要传整个对象,在方法中用 对象.属性的方法更改这个值才有用。

回答2:

是对象的引用,把这个弄清楚就能理解了,当你拿到这个对象
通过对象的引用取到对象身上的变量设值更改.
x是对象A的一个属性成员,成员属性包括方法和变量两个.

回答3:

楼主是不是困惑于change(obj)和public static void change(A obj)
中参数的不同,在change(obj)方法前对象obj已经被声明过了所以不必是A obj.而在静态方法public static void change(A obj)前即没声明obj也没对x赋值,所以在参数中要声明。

回答4:

楼主的问题是一个若名问题。
意思就是用类A的对象来改变类A的成员变量,你不是说不清楚change(obj); 和public static void change(A obj) 里面的参数吗/其实public static void change(A obj) 里面的参数你可以改变,只要不改变它的类型,也就是说可以把public static void change(A obj)改为public static void change(A jbo)这里的参数随便你改,因为他只是一个参数,用类A的另外一个对象来改变类A的obj对象的成员变量。

回答5:

对象不就是由成员变量组成的吗?

我好像不是太懂你说的是什么了。

回答6:

这是一个参数传值的问题 类似于
public class PassTest{
float ptValue;
public static void main(String args[]) {
PassTest pt=new PassTest();
pt.ptValue=101f;
System.out.println("Original ptValue is:"+pt.ptValue);
pt.changeObjValue(pt);
System.out.println("ptValue after Change is:"+pt.ptValue);
}
public void changeObjValue(PassTest ref){
ref.ptValue=99;
}
}