public class testtype
{
private int a;
private double b;
testtype(int a,double b)
{
this.a=a;
this.b=b;
}
public void maketoequal(testtype oo)
{
oo.a=this.a;
oo.b=this.b;
}
void trytoequal(int c)
{
c=this.a;
}
public static void main(String[] args)
{
testtype t1,t2;
t1=new testtype(10,15.0);
t2=new testtype(5,100.0);
t1.maketoequal(t2);
System.out.println("after the method is called:"+"\n"+"the value of a for t2 is:"+t2.a
+"\n"+"the value of b for t2 is :"+t2.b);
int c=50;
t1.trytoequal(c);
System.out.println("the value of c after the method be called is:"+c);
}
}
为什么c没有改变?
答案 0 :(得分:5)
答案 1 :(得分:4)
Java按值传递参数(因此在方法中本地创建并使用该值的副本。)
对于原始类型 - 在您的情况下为c - ,该值是c的值,因此您使用c值的副本并且不更改c
对于一个对象,value是引用的值,所以即使你按值传递它(复制它)它仍然引用相同的对象,你可以使用你的引用副本来改变对象...
答案 2 :(得分:2)
答案 3 :(得分:0)
在java中,参数是按值传递的,而不是通过引用传递的,因此您在“trytoequal”中所做的操作将无效。
请参阅有关java变量值的这些说明:http://www.yoda.arachsys.com/java/passing.html
答案 4 :(得分:0)
原始数据类型按值传递,而不是通过引用传递,这意味着您在“trytoequal”中获得的c是一个变量,其范围就在方法内,其值是方法参数的副本。
答案 5 :(得分:0)
方法中c的值被更改,然后被丢弃。