关于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的值变了...
我的问题是 ... 为什么? 展开
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的值变了...
我的问题是 ... 为什么? 展开
展开全部
首先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都声明为静态的类成员变量..~则可进行交换操作..
swap方法并没有起到应有的作用.在swap中改变的只是o1和o2这两个分别指向a和b的引用之间的关系,即交换了01和02的指向,并没有从根本上影响到a和b本身.
将其改为
public static void swap() {
Integer t = a;
a = b;
b = t;
c = 10000;
}
前提是将ab都声明为静态的类成员变量..~则可进行交换操作..
展开全部
c是全局变量,一处开动会影响整个类中所有使用它的地方, 你在swap方法中,对c重新进行了赋值, 那么在main方法中最后的输出c的值一定会和第一次是不一样的
封装类的传递会按照值类型的操作来进行,而不会按照引用类型来进行操作
封装类的传递会按照值类型的操作来进行,而不会按照引用类型来进行操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就计算机计算过程来说,C是静态变量,即~当你写了这个类,就有了c的内存空间和地址,而不是像a,b:当你写了类,没有空间,而new一个Demo2对象时申请空间。静态变量c只有一个,不管你new了多少对象,有了多少个a和b,c永远只有一个,在一处改变了,别的对象调用时,就是改变了的那个。一句话,c变了,就永远变了。
a,b没变的原因是函数调用的过程为:CPU先进行保存现场的压栈操作,然后转而进行函数的运行,然后恢复现场(如果有返回值,则带回一个值),因为保存现场,恢复现场,因而对主函数一些变量没有影响。
a,b没变的原因是函数调用的过程为:CPU先进行保存现场的压栈操作,然后转而进行函数的运行,然后恢复现场(如果有返回值,则带回一个值),因为保存现场,恢复现场,因而对主函数一些变量没有影响。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c是全局变量啊,,你在swap里重新定义了它的值,当然不一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询