public class Text {
int m = 1;
int n = 2;
public void m1 (int i) {
m=i;
}
public static void main (String [] args) {
Text t = new Text();
t.m1(2);
System.out.println(t.m);
}
}
本人菜鸟,写一个这么个程序,主要是想验证值传递和引用传递的区别.听说值传递是改变不了成员变量的值(乱说的啊,不知道是不是成员变量值.肯定有个是改变不了的),可我这编译完怎么m的值变了呢.不是只有当型参是引用传递的时候才会改变么.现在验证不明白了.请高手帮忙调试下.改动下.
int m = 1;
int n = 2;
public void m1 (int i) {
m=i;
}
public static void main (String [] args) {
Text t = new Text();
t.m1(2);
System.out.println(t.m);
}
}
本人菜鸟,写一个这么个程序,主要是想验证值传递和引用传递的区别.听说值传递是改变不了成员变量的值(乱说的啊,不知道是不是成员变量值.肯定有个是改变不了的),可我这编译完怎么m的值变了呢.不是只有当型参是引用传递的时候才会改变么.现在验证不明白了.请高手帮忙调试下.改动下.
public static void main(String[] args) throws ParseException {
int i = 5 ;
System.out.println(i) ;
m(i) ;
}
public static void m(int i){
i = 3 ;
System.out.println(i) ;
}
}
引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。你的m是在整个类中的,肯定会改变值的,如果你把m当作一个函数的参数传递给那个参数,那么你输出定义的m的话,它的值是不会改变的
public static void main(String[] args) throws ParseException {
A a = new A() ;
a.i = 5 ;
System.out.println(a.i) ;
m(a) ;
System.out.println(a.i) ;
}
public static void m(A a){
a.i = 3 ;
System.out.println(a.i) ;
}
}
class A{
int i ;
}
但这个值是有区别的
当参数是一个对象的时候,这个值是该对象在堆中的地址值
你可以理解为C中的指针
int m = 1;
int n = 2;
public void m1 (int m) {
//m=i; 这里已经改变成员变量的值了
m=10;
}
public static void main (String [] args) {
Text t = new Text();
t.m1(t.m); //这里把m值的传给函数
System.out.println(t.m);
}
}