值类型和引用类型做参数时的值会不会影响实参
程序员文章站
2022-05-22 21:22:48
...
我们知道,一个方法是可以有形参的,也就是方法名后括号里的参数,当我们调用此方法,并向里面传入参数时,也就是实参,那这个实参会不会改变呢?
当我们传入int类型的值时,无论传入的形参是多少,他本身的实参并不会改变,八大数据类型都为值类型。
当我们传入引用类型的值时,他本身的实参会根据方法里的语句做出改变。
还有一种引用类型,他非常特殊,他就是String,String虽然是引用类型,但是他在调用方法时,确确实实的不会改变他自身的值。接下来我们用图来解释一下:
接下来我们用代码写一下:
public static void main(String[] args) {
/*
* 值类型
*/
int a = 10;
System.out.println( "调用前:"+ a );
changNum(a);
System.out.println( "调用后:"+ a );
/*
* 字符串类型
*/
String str = "ABCD";
System.out.println("调用前 :" + str );
changString(str);
System.out.println("调用后 :" + str );
/*
* 对象类型
*/
Student s1 = new Student();
s1.setAge(10);
s1.setName("张三");
System.out.println("调用前:"+ s1);
changStudent(s1);
System.out.println("调用后:"+ s1);
}
public static void changNum ( int num ) {
num ++ ;
}
public static void changString ( String str1 ) {
str1 += "1234";
//字符串不允许在原地址上进行修改,每次都新建地址进行操作。
}
public static void changStudent ( Student s ) {
s.setAge(100);
s.setName("李四");
}
执行的结果为:
调用前:10
调用后:10
调用前 :ABCD
调用后 :ABCD
调用前:Student [name=张三, age=10]
调用后:Student [name=李四, age=100]