class Example{
static int i=1;
static{
i++;
}
public static void main(String[] args){
increment(i,5);
display(i);
}
static void increment(int n,int m){
n+=m;
}
static void display(int n){
System.out.println(n);
}
static{
++i;
}
}
输出结果是:3。如果想让输出结果为8,应该怎么改?
java中参数能双向传递吗?
java中值传递,传递的是参数的地址吗?

解决方案 »

  1.   

    public class tt {
    static int i = 1;
    static {
    i++;
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    i = increment(i, 5);
    display(i);
    }
    static int increment(int n, int m) {
    n += m;
    return n;
    }
    static void display(int n) {
    System.out.println(n);
    }
    static {
    ++i;
    }
    }
      

  2.   

    传值不传参
    修改increment
    static int increment(int n,int m){
    return n+=m;
    }
    修改main
    public static void main(String[] args) {
    display(increment(i, 5));
    }
      

  3.   


    public class Example { 

    static int i=1; 
    static { 
    i++; 


    public static void main(String[] args){ 
    increment(5); 
    display(i); 


    static void increment(int m){ 
    i+=m; 


    static void display(int n) { 
    System.out.println(n); 
    }
     
    static { 
    ++i; 

      

  4.   


    static int increment(int n, int m) { 
    n += m; 
    return n; 

    返回n就可以了
      

  5.   

    代码可以参看别人的,我这里说一下后面的两个问题
    java中参数不能双向传递,所有的参数实际上都是单向的,即值传递,
    可以这样理解,基本变量传递的是数值本身,而引用变量传递的是地址,就像c或c++中的非指针参数与指针参数一样。
    其实,java中的引用就是指针,它装的就是被引用对象的地址。
      

  6.   


    一楼的可以,也可以把increment(int n, int m)方法改成这样static int increment(int m) { 
    i += m; 

    java 中没听说过有双向传递,值传递,顾名思意,就是传的值,
      

  7.   

    如果想让输出结果为8,应该怎么改? 
    display(i+5),估计不是lz的意思,呵呵
    java中参数能双向传递吗?
    你说的双向传递是不是改变你传递的对象的状态?告诉你,有时候可以,有时候不可以,这得具体情况具体分析,对于基本类型不可以
    也就是你的例子,企图改变i的值,不行,对于类,就另当别论,她可以改变对象的状态(也就是属性值),但是不能改变原始对象指向的地址。

    java中值传递,传递的是参数的地址吗?
    除了基本类型,你说的对,传递的是地址的值
      

  8.   


    public class Test //执行顺序1-5
    {
    static int i=1;
    static{   //执行顺序1
    i++; 
    } public static void main(String[] args){  //执行顺序3
    increment(i,5);
    display(i);
    } static void increment(int n,int m){  //执行顺序4
    n+=m;
    i=n;
    } static void display(int n){  //执行顺序5
    System.out.println(n);
    } static{ // 执行顺序2
    ++i; 
    }}执行顺序:先执行两个static{..}静态游离块方法(这个名字本人是自定义),类中首尾各一个,
    再执行main()方法中的increment()和display()方法.