
java 中 Integer 传参方式的问题,不是说Integer是引用传递么?但为什么不会改变it
publicclassMain{publicstaticvoidmain(String[]args){Integerit=newInteger(123);System.o...
public class Main {
public static void main(String[] args) {
Integer it=new Integer(123);
System.out.println(it);
}
public static void text2(Integer it) {
it =99;
it=it+99;
}
}
java 中 Integer 传参方式的问题,不是说Integer是引用传递么?但为什么不会改变it的值?
忘了写调用了,我但我字了调用也没用
text2(it);
同样还是没用把it的值改变 展开
public static void main(String[] args) {
Integer it=new Integer(123);
System.out.println(it);
}
public static void text2(Integer it) {
it =99;
it=it+99;
}
}
java 中 Integer 传参方式的问题,不是说Integer是引用传递么?但为什么不会改变it的值?
忘了写调用了,我但我字了调用也没用
text2(it);
同样还是没用把it的值改变 展开
4个回答
展开全部
Java本身都是值传递式的调用,对于对象传递的是地址值。给地址值重新赋值等于重新指向,不会影响外层。
而且这里Integer对象也有特殊性。其实现上可能类似
class Integer{
final int value; //一旦赋值,就不能改变。
}
这就出现:调用时传的地址值不能改变外层+对象本身又不能改变。导致这个值没法改变
解决方案很多
1、java风格就是,单个值用返回值。return i; 外面再i=foo();赋值;多个值用数组或对象。
2、传递自己的封装类。class MutableInteger{ int value;}
3、传递专用AtomicInteger原子整型对象
public static void main(String[] 参数) {
AtomicInteger i=new AtomicInteger(40);
i.intValue();
System.out.println(i);
}
public static void change(AtomicInteger i) {
i.set(55);
}
也可以实现传递后改值 ,
推荐方案1,尽量避免
而且这里Integer对象也有特殊性。其实现上可能类似
class Integer{
final int value; //一旦赋值,就不能改变。
}
这就出现:调用时传的地址值不能改变外层+对象本身又不能改变。导致这个值没法改变
解决方案很多
1、java风格就是,单个值用返回值。return i; 外面再i=foo();赋值;多个值用数组或对象。
2、传递自己的封装类。class MutableInteger{ int value;}
3、传递专用AtomicInteger原子整型对象
public static void main(String[] 参数) {
AtomicInteger i=new AtomicInteger(40);
i.intValue();
System.out.println(i);
}
public static void change(AtomicInteger i) {
i.set(55);
}
也可以实现传递后改值 ,
推荐方案1,尽量避免
展开全部
这个确实蛮难理解的,我也只能简单的说一下,希望能帮到你。
虽然你传了it这个参数到text2方法中,但实际上传得是it这个引用,并没有传对象的地址进去。由于text2方法没有返回值且it并不是成员变量,所以在text2中执行的语句其实可以看成一个无关的语句,并不会真正改变it原本所指向的Integer对象。所以输出地仍然是123.
你如果要改值的话可以return it或把it改为成员变量就好了。
虽然你传了it这个参数到text2方法中,但实际上传得是it这个引用,并没有传对象的地址进去。由于text2方法没有返回值且it并不是成员变量,所以在text2中执行的语句其实可以看成一个无关的语句,并不会真正改变it原本所指向的Integer对象。所以输出地仍然是123.
你如果要改值的话可以return it或把it改为成员变量就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public class Main {
public static void main(String[] args) {
Integer it=new Integer(123);
text2(it);
System.out.println(it);
}
public static void text2(Integer it) {
it =99;
it=it+99;
}
}
要运行一下方法啦。。。。
public static void main(String[] args) {
Integer it=new Integer(123);
text2(it);
System.out.println(it);
}
public static void text2(Integer it) {
it =99;
it=it+99;
}
}
要运行一下方法啦。。。。
追问
我写了调用一样是没用改变值
追答
http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html
像 Integer String 这些特别的类 传的是值吧
这个看一下吧 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里的test2(Integer it )好像没调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询