日期:2014-05-20  浏览次数:20665 次

javaz中能用方法更改两个数的值吗?类似C语言的指针的效果?
public   class   TestString   {

public   void   swap(Integer   a,   Integer   b)   {
           
Integer   team;
team   =a;
a   =   b;
b   =   team;
System.out.println( "a= "+a.intValue());
System.out.println( "b= "+b.intValue());

}

public   static   void   main(String[]   args)   {

Integer   a   =   Integer.valueOf(1);
Integer   b   =   Integer.valueOf(3);

TestString   ts   =   new   TestString();
ts.swap(a,b);
System.out.println( "a= "+a.intValue());
System.out.println( "b= "+b.intValue());

}
}

这是我写的不能换值
高手指点一下???????!!!!!!!!1

------解决方案--------------------
java里面和C不同只有传值没有传地址~

------解决方案--------------------
传的都是引用,即使是对象也是传的对象引用的副本,如果非要交换,只能通过数组或者改变
对象.属性的情况来实现
------解决方案--------------------
public class Mugs
{
int m ,n;
public void Exchange(int a, int b)
{
m=b;
n=a;
}
public static void main(String agrs[])
{
Mugs ob = new Mugs();
int m = 44;
int n = 77;
System.out.println( "before exchange: m = " + m + ", n = " + n);
ob.Exchange(m, n);
System.out.println( "after exchange: m = " + ob.m + ", n = " + ob.n);
}
};
给你一个参考。。。。
------解决方案--------------------
Integer,String,Float,Double等包装类都是final的,所以不能作为引用传递
------解决方案--------------------
i see

thks
------解决方案--------------------
非基本类型都可以更改吧.
Try "Integer "?
------解决方案--------------------
> arbuckle(Judas)
> 非基本类型都可以更改吧.
> Try "Integer "?

对象也有分可改(mutable)不可改(immutable)的。所有的基本类型对应的对象类型(如String、Integer等)都是不可改的(immutable)。

楼主可用数组的方式让函数修改数组中的元素。

--
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.com
------解决方案--------------------
个人认为能不能改是类型时无关的,
而和你想改变的内容有关。
如果你仅仅想修改属性值,任何类型都可以,
但是如果你想在方法内改变这个对象的值,
很抱歉,任何类型都不行。
因为JAVA中虽然说传递的使用
实际上是引用的Copy.
--------------------------------
public static void increase1(A a){
a.id = 5;
}

public static void increase2(A a ){
a = new A();
a.id = 5;
}
public void test(){
A a = new A();//0
increase1(a);//1
increase2(a);//2
}
-------------------------------------
由于传递的是引用的copy,即1和2处所传递的值和0处的是不同的东西,但是由于是copy,所以他们指向的是同一块地址,假设为X。increase1中改变的是属性,就相当于把X中的某一点给修改了,而0处的a仍然是指向X的,所以修改成功。而在increase2中,由于“a = new A();”,相当于将引用的copy指向了另外一个地址,但是它并没有对原来的值(即X)做任何修改,也就对于0处a没有任何影响了,所以increase2中的修改不成功。
------解决方案--------------------
http://blog.csdn.net/jianzhizg/archive/2006/12/02/1427086.aspx
------解决方案--------------------
别说java,C里面这样写也不能交换阿