1、形参与实参
- 形参:方法被调用时传递的参数,如:
fun(int a)
中的a,只有在fun被调用期间a才被分配内存空间,在fun方法被执行完成后,a就会被销毁释放空间。 - 实参:方法被调用时传递的实际值,在方法被调用前就已经初始化并在被调用时传入。
public static void fun(int b){
b=20;
System.out.println(b);
}
public static void main(String[] args) {
int a=10;//变量
fun(a);
}
其中,
a在被调用前就已经被初始化,在调用fun方法时,a被当作参数传入,故a为实参;
b在fun被调用时才被分配内存空间,在fun结束后,b即被释放,故b为形参。
2、数据类型
基本类型
4种整数类型:byte、short、int、long
2种浮点数类型:float、double
1种字符类型:char
1种布尔类型:boolean
引用类型
类
接口
数组
在图中,num是基本类型,值na存在变量中;str是引用类型,变量中保存的是对象的地址,引用指向实际对象。
3、赋值运算符的作用
num = 20;
str = "java";
对于基本类型num,赋值运算符会直接改变变量的值,原值会被覆盖掉。
对于引用类型str,赋值运算符会改变引用中保存的地址,原来的地址会被替换掉,但原来的对象不会改变。
4、值传递和引用传递的理解
值传递
在方法的调用过程中,实参把值复制给了形参,实参的值不变。
引用传递
引用传递弥补了如果值传递的数据量过大,复制时造成的内存浪费情况。
引用传递就是将对象的地址值传递过去,在方法的执行过程中,形参和实参的地址值相同,指向同一块地址,故方法的执行会影响到原对象。
public class Example {
String str = new String("hello");
char[] ch = {'a', 'b'};
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.println(ex.str + " and");
System.out.println(ex.ch);
}
public void change(String str, char[] ch) {
str = "ok";
ch[0] = 'c';
}
}
输出是:
hello and
cb
过程分析:
- 为对象分配内存空间
- 执行change()方法
执行前实参(黑色)和形参(红色)的指向如下: - 打印
Summery
- 基本数据类型传值,形参的修改不会影响实参。
- 引用类型传递的是引用,对参数的修改会影响到实际对象。
- String,integer,Double等类型的传递为传值。