void method(int x, int y) { ..... } } 情况2:如果实参是引用类型,public class Test { public static void main(Sting[] args) { String s = new String("abc"); method(s);//调用方法method,传递实参s="abc",此时实参还是分配在栈内存的。但要注意,此时分配在栈内存的只是一个String类型的变量s,而 “abc”是分配在堆内存的。 如果将将method(s);写成method("abc");就不一样了,此时实参是一个分配在Data Segment区的字符串常量。 }
值传递是传递数据:象基本数据类型都是值传递
引用传递是把形参和实参的指针指向了堆中的同一对象
值传递是传递数据:象基本数据类型都是值传递
引用传递:对象的引用和数组的引用。
情况1:如果实参是基本类型,public class Test {
public static void main(Sting[] args) {
int a = 3;
int b = 4;
method(a, b);//调用方法method,传递实参a=3,b=4,此时实参也是分配在栈内存的。
}
void method(int x, int y) {
.....
}
} 情况2:如果实参是引用类型,public class Test {
public static void main(Sting[] args) {
String s = new String("abc");
method(s);//调用方法method,传递实参s="abc",此时实参还是分配在栈内存的。但要注意,此时分配在栈内存的只是一个String类型的变量s,而
“abc”是分配在堆内存的。
如果将将method(s);写成method("abc");就不一样了,此时实参是一个分配在Data Segment区的字符串常量。
}
void method(String s) {
.....
}
}
楼主可以看看内存分配的知识就知道了,有不明白的可以问我。
希望我的回答能帮助你。
请问,“abc”不是分配在String池中吗?
迷糊~~
什么是形参?形参在JAVA中就是方法的参数签名,它根本就不会分配任何空间,它连同方法名本身就是一个Method对象
如果是不可变对象,比如String,对String得操作,是不会影响实参得,因为String对象生成以后就再也不会改变,
如果是可变对象,比如自定义的对象,传递得是引用,函数内部是另外一个引用,即形参和实参都指向同一个对象,是对同一个对象操作,这和C++得引用是类似得,当然引用也是占内存的!
形参,就是方法调用时的“参数模板”,简单说在生成方法栈中分配多少空间供实参压入,这个空间仅仅是保留给实参用的,因为形参连同它的方法名和返回值作为一个方法签名(方法原型)已经被常驻在一个特定区域。就象一个类的class对象,在方法调用时绝对不会为形参分配空间。简单说形参其实是在方法栈中如何分配参数(实参)的原则,它自己根本就不需要分配空间!(当然方法签名本或方法原型本身是有空间的,但那不叫来形参分配空间)
它们就是形参的空间啊.