当前位置:  技术问答>java相关

超级简单快来捡分

    来源: 互联网  发布时间:2015-07-12

    本文导语:  预交换A,B的值 public class exchange{  static Integer a =new Integer(5);  static Integer b =new Integer(25); private static void ex(Integer a ,Integer b){ Integer t=a; a=b; b=t; System.out.println("a="+a+" b="+b);  } public static void main(...

预交换A,B的值

public class exchange{
 static Integer a =new Integer(5);
 static Integer b =new Integer(25);

private static void ex(Integer a ,Integer b){
Integer t=a;
a=b;
b=t;
System.out.println("a="+a+" b="+b); 
}

public static void main(String args[])
{
         
System.out.println("a="+a+" b="+b); 
ex(a,b);
System.out.println("a="+a+" b="+b); 
}
}

结果:
a=5 b=25
a=25 b=5
a=5 b=25


why?????



|
private static void ex(Integer a ,Integer b){
Integer t=a;
                  //t是对a的引用,用c++的话说就是t是指向a的指针
a=b;
                  //这里a的值变了,t也就变了
b=t;
System.out.println("a="+a+" b="+b); 
}

|
你在ex(Integer a ,Integer b)方法中只是改变两个局部变量,并没有改变全局静态变量a,b.
改一下即可:
private static void ex(){
Integer t=a;
a=b;
b=t;
System.out.println("a="+a+" b="+b); 
}

|
在这里java传递的是值而不是地址,所以交换不起作用,
private static void ex(Integer a ,Integer b){
Integer t=a.clone();
a=b;
b=t;
System.out.println("a="+a+" b="+b); 
}
是可以的

|
这种情况是典型的值传递问题,并不是引用传递,所以改变的是传递过去的值,并不能改变本身的值。可修改为如楼上的兄弟所示的那样。

|
Integer 是一个类,java在传递类形式的参数时传递的是引用,在传递primate类型的参数时传递的时指,你可以把 Integer的值付给一个int变量,再传递该变量时,所做的交换就会生效.然后在把交换后的变量转换成Integer形式.试一试,看能否可行!

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 非常变态的要求!看着简单,做起来就是不行,快来看看。
  • 简单问题大家快来!在线等候!
  • 快来看看,简单但不容易实现!!!
  • 非常变态的要求2!看着简单,做起来就是不行,快来看看2
  • 超级简单快来捡分
  • php开源软件 iis7站长之家
  • 求助关于静态数据初始化问题,很简单的,快进来看看。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3