java什么时候需要传参 传参是干什么的 求大神解答 越详细越好
2个回答
展开全部
先来看个基本类型作为参数传递的例子
public class test{
public static void main(String[] args) {
int n = 3;
System.out.println("变化前, n = " + n);
changeData(n);
System.out.println("变化后, n = " + n);
}
public static void changeData(int n) {
n = 10;
}
}
输出结果:
变化前, n = 3
变化后, n = 3
说明:基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的
再来看个对象作为参数传递的例子
public class file2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Yo man");
System.out.println("变化前, sb = " + sb);
changeData(sb);
System.out.println("变化后, sb = " + sb);
}
public static void changeData(StringBuffer strBuf) {
strBuf.append(", what's up?");
}
}
输出结果:
变化前, sb = Yo man
变化后, sb = Yo man, what's up?
说明:对象作为参数传递时,是把对象的引用传递过去,如果引用在方法内被改变了,那么原对象也跟着改变。
那么为什么对象作为参数传递时,原值会变化呢?
答:当我们执行 StringBuffer sb = new StringBuffer("Yo man");这句时,内存的堆里生成一个StringBuffer(简称sb)对象,里面会有一个地址,指向的是“Yo man”这个字符串。
可以想象成 sb地址---->"Yo man"
当执行了changeData(sb);这句话的时候,就把sb传给了changeData方法中的StringBuffer strBuf,由于sb中存放的是地址,所以,strBuf中也将存放相同的地址
可以想象成 sb地址----->"Yo man" <------- strBuf地址
此时,sb和strBuf中由于存放的内存地址相同,因此都指向了“Yo man”
当执行了 strBuf.append(", what's up?");这句话时,strBuf所指向的“Yo man”就会添加上“what's up?”,变成“Yo man, what's up?”,因为sb所指向的也是这句话,所以原始值就会变了
可以想象成 sb地址----->"Yo man, what's up?" <------- strBuf地址
希望对你有帮助!
public class test{
public static void main(String[] args) {
int n = 3;
System.out.println("变化前, n = " + n);
changeData(n);
System.out.println("变化后, n = " + n);
}
public static void changeData(int n) {
n = 10;
}
}
输出结果:
变化前, n = 3
变化后, n = 3
说明:基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的
再来看个对象作为参数传递的例子
public class file2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Yo man");
System.out.println("变化前, sb = " + sb);
changeData(sb);
System.out.println("变化后, sb = " + sb);
}
public static void changeData(StringBuffer strBuf) {
strBuf.append(", what's up?");
}
}
输出结果:
变化前, sb = Yo man
变化后, sb = Yo man, what's up?
说明:对象作为参数传递时,是把对象的引用传递过去,如果引用在方法内被改变了,那么原对象也跟着改变。
那么为什么对象作为参数传递时,原值会变化呢?
答:当我们执行 StringBuffer sb = new StringBuffer("Yo man");这句时,内存的堆里生成一个StringBuffer(简称sb)对象,里面会有一个地址,指向的是“Yo man”这个字符串。
可以想象成 sb地址---->"Yo man"
当执行了changeData(sb);这句话的时候,就把sb传给了changeData方法中的StringBuffer strBuf,由于sb中存放的是地址,所以,strBuf中也将存放相同的地址
可以想象成 sb地址----->"Yo man" <------- strBuf地址
此时,sb和strBuf中由于存放的内存地址相同,因此都指向了“Yo man”
当执行了 strBuf.append(", what's up?");这句话时,strBuf所指向的“Yo man”就会添加上“what's up?”,变成“Yo man, what's up?”,因为sb所指向的也是这句话,所以原始值就会变了
可以想象成 sb地址----->"Yo man, what's up?" <------- strBuf地址
希望对你有帮助!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |