关于java 交换swap的一个问题

publicclassDemo2{staticIntegerc=newInteger(200);publicstaticvoidmain(String[]args){In... public class Demo2 {

static Integer c = new Integer(200);

public static void main(String []args) {
Integer a = new Integer(4);
Integer b = new Integer(100);

System.out.println("a: " + a);
System.out.println("b: " + b);
System.out.println("c: " + c);
swap(a, b);

System.out.println("Swapped!");
System.out.println("a: " + a);
System.out.println("b: " + b);
System.out.println("c: " + c);
}

public static void swap(Object o1, Object o2) {
Object t = o1;
o1 = o2;
o2 = t;
c = 10000;
}

}
问a b c各输出什么?
我知道a b的值都没有变 . 而C的值变了...
我的问题是 ... 为什么?
展开
 我来答
liushebiao
2009-07-26 · TA获得超过3336个赞
知道小有建树答主
回答量:724
采纳率:0%
帮助的人:385万
展开全部
首先c是静态变量,swap中对c的修改,相当于直接对c进行操作,因此,c的值改变是合情理的...

swap方法并没有起到应有的作用.在swap中改变的只是o1和o2这两个分别指向a和b的引用之间的关系,即交换了01和02的指向,并没有从根本上影响到a和b本身.

将其改为
public static void swap() {
Integer t = a;
a = b;
b = t;
c = 10000;
}
前提是将ab都声明为静态的类成员变量..~则可进行交换操作..
ajax_2003
2009-07-26 · TA获得超过4995个赞
知道大有可为答主
回答量:2628
采纳率:0%
帮助的人:2443万
展开全部
c是全局变量,一处开动会影响整个类中所有使用它的地方, 你在swap方法中,对c重新进行了赋值, 那么在main方法中最后的输出c的值一定会和第一次是不一样的

封装类的传递会按照值类型的操作来进行,而不会按照引用类型来进行操作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
S_Kr
2009-07-27 · TA获得超过616个赞
知道小有建树答主
回答量:620
采纳率:100%
帮助的人:484万
展开全部
就计算机计算过程来说,C是静态变量,即~当你写了这个类,就有了c的内存空间和地址,而不是像a,b:当你写了类,没有空间,而new一个Demo2对象时申请空间。静态变量c只有一个,不管你new了多少对象,有了多少个a和b,c永远只有一个,在一处改变了,别的对象调用时,就是改变了的那个。一句话,c变了,就永远变了。
a,b没变的原因是函数调用的过程为:CPU先进行保存现场的压栈操作,然后转而进行函数的运行,然后恢复现场(如果有返回值,则带回一个值),因为保存现场,恢复现场,因而对主函数一些变量没有影响。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
若水无忧kis
2009-07-27 · TA获得超过219个赞
知道答主
回答量:77
采纳率:0%
帮助的人:18.4万
展开全部
c是全局变量啊,,你在swap里重新定义了它的值,当然不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暖LOVE愛
2009-07-27
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
hjgbnb,.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式