传入对象时是传值还是传引用
答案:1 悬赏:60 手机版
解决时间 2021-03-25 00:50
- 提问者网友:遮云壑
- 2021-03-24 05:25
传入对象时是传值还是传引用
最佳答案
- 五星知识达人网友:从此江山别
- 2021-03-24 06:25
记住一点,基本类型是传值,引用类型是传引用,对象是引用类型,所以传的是引用。
那么可能有人会对如下的执行结果产生疑问:
public static void main(String[] args) {
String str = "s";
doStr(str);
System.out.println(str);
Integer integer = new Integer(1);
doInt(integer);
System.out.println(integer);
}
public static void doStr(String str) {
str = "sss";
}
public static void doInt(Integer integer) {
integer = 2;
}
输出结果为:
s
1String和Integer明明是引用类型,为什么值没有被改变?这里要说的就是这两个的特殊性,str = "sss"这一行执行的操作是在常量池寻找匹配的字符串指向该引用,如果没有会执行 str=new String("sss"),这是String类型的特殊性,有兴趣可以学习一下。 而integer = 2这一行执行的是integer = new Integer(2),这就是自动装箱操作,同理,所有基本类型对应的对象类型也是同样的。也就是说,上述操作已经不是对原来被引用对象的操作了,所以对象的值没有改变。
那么可能有人会对如下的执行结果产生疑问:
public static void main(String[] args) {
String str = "s";
doStr(str);
System.out.println(str);
Integer integer = new Integer(1);
doInt(integer);
System.out.println(integer);
}
public static void doStr(String str) {
str = "sss";
}
public static void doInt(Integer integer) {
integer = 2;
}
输出结果为:
s
1String和Integer明明是引用类型,为什么值没有被改变?这里要说的就是这两个的特殊性,str = "sss"这一行执行的操作是在常量池寻找匹配的字符串指向该引用,如果没有会执行 str=new String("sss"),这是String类型的特殊性,有兴趣可以学习一下。 而integer = 2这一行执行的是integer = new Integer(2),这就是自动装箱操作,同理,所有基本类型对应的对象类型也是同样的。也就是说,上述操作已经不是对原来被引用对象的操作了,所以对象的值没有改变。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯