两个Integer的引用对象传给一个swap方法在方法内部交换引用
2018-01-29 20:29
357 查看
引用传递--交换数值的问题
如下代码,返回的经过了swapTest()方法后输出的i1,i2是否交换?
public class SwapTest {
private void swapTest(Integer i1,Integer i2){
Integer tem = i1;
i1 = i2;
i2 = tem;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
new SwapTest().swapTest(i1, i2);
System.out.println(i1 +":" + i2);
}
}
执行输出如下:
1:2
分析如下:
//这时候传入的只是i1,i2的两个内存引用
new SwapTest().swapTest(i1, i2);
//然后在方法里i1,i2非调用时的i1,i2,再怎么去互换他的引用,也不影响在调用时候的引用。
private void swapTest(Integer i1,Integer i2){
Integer tem = i1;
i1 = i2;
i2 = tem;
}
如果交换的是全局的引用,比如这样:
public class SwapTest {
private static Integer i1 = new Integer(1);
private static Integer i2 = new Integer(2);
private void swapTest(){
Integer tem = i1;
i1 = i2;
i2 = tem;
}
public static void main(String[] args) {
new SwapTest().swapTest();
System.out.println(i1 +":" + i2);
}
}
执行输出结果:
2:1
如下代码,返回的经过了swapTest()方法后输出的i1,i2是否交换?
public class SwapTest {
private void swapTest(Integer i1,Integer i2){
Integer tem = i1;
i1 = i2;
i2 = tem;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
new SwapTest().swapTest(i1, i2);
System.out.println(i1 +":" + i2);
}
}
执行输出如下:
1:2
分析如下:
//这时候传入的只是i1,i2的两个内存引用
new SwapTest().swapTest(i1, i2);
//然后在方法里i1,i2非调用时的i1,i2,再怎么去互换他的引用,也不影响在调用时候的引用。
private void swapTest(Integer i1,Integer i2){
Integer tem = i1;
i1 = i2;
i2 = tem;
}
如果交换的是全局的引用,比如这样:
public class SwapTest {
private static Integer i1 = new Integer(1);
private static Integer i2 = new Integer(2);
private void swapTest(){
Integer tem = i1;
i1 = i2;
i2 = tem;
}
public static void main(String[] args) {
new SwapTest().swapTest();
System.out.println(i1 +":" + i2);
}
}
执行输出结果:
2:1
相关文章推荐
- C++开发中一个解决方案里,两个项目的相互引用,相互依赖的实现方法(解决方法)
- 【一个实体对象不能由多个 IEntityChangeTracker 实例引用】原因及解决方法
- writeObject可以写n个,但是readObject()却只能读一次,你做一下测试。 如果你需要序列化好几个类的话,建议你用json;或者自己写两个方法,一个是将对象转换为字符串,一个是将字符串
- 定义一个圆类——Circle,在类的内部提供一个属性:半径(r),同时 提供 两个 方 法 : 计算 面积 ( getArea() ) 和 计算 周长(getPerimeter()) 。 通过两个方法
- android中引用方法的时候,有时候要new一个对象才能引用,有时候直接.方法就可以了,为什么
- 5.编写一个程序,有两个类,其中类MAX中具有两个方法,方法名都是max,一个方法能够比较两个数的大小,另外一个方法能够比较三个数的大小。在另外一个类中创建对象,调用这两个方法,分别输出两组数:2、6
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- Java中堆内存和栈内存_在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)。修改栈指针就可以把栈中的内容销毁.这样最快
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- Java中int和Integer的区别:int 是基本类型,直接存数值 ;integer是对象,用一个引用指向这个对象
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 一个方法中有两个Block并且同时操作了一个对象,该对象只会被保留一次
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java程序练习:尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将他向上转型到基类并调用这个方法。
- EXTJS学习系列基础篇:第四篇(转载)作者殷良胜,Ext中有两个很重要的方法,一个是decode;一个是encode.顾名思义,一个是编码,一个是解码,你难道真的这么想吗?严格的说,一个是将json字符串转换成对象;一个是将对象转换成json字符串
- 使用指针引用的方法和二维指针的方法交换两个字符串
- 迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。
- a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法