链接:https://www.nowcoder.com/questionTerminal/0280fb67cb444178acc9685e1b0df295
来源:牛客网
传值是传递了值对应的变量的副本,该副本被赋予新值并暂存于常量池中,在方法调用结束后就会被释放,原来地址中存放的数值并没有被改变,所以方法调用结束后,该变量任然是原来地址中的值。
八大基本数据类型都是按值调用
传引用是传递原变量的地址的副本,由于有新值被付给该副本地址,而一个地址对应一个数值,所以副本地址中的值被改变,而对象的地址是在堆中的,通过栈中的引用来操作,不会像变量那样被释放,所以方法调用结束后原地址中的值被新值取代。 String虽然是对象引用,但比较特殊,规定其引用是不可变的。
数组、对象 ,String虽然是对象引用,但比较特殊,规定其引用是不可变的。
链接:https://www.nowcoder.com/questionTerminal/0280fb67cb444178acc9685e1b0df295
来源:牛客网
public
class
Example{
String str=
new
String(
"good"
);
char
[]ch={
'a'
,
'b'
,
'c'
};
public
static
void
main(String args[]){
Example ex=
new
Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+
" and "
);
System.out.print(ex.ch);
}
public
void
change(String str,
char
ch[]){
//引用类型变量,传递的是地址,属于引用传递。
str=
"test ok"
;
ch[
0
]=
'g'
;
}
}