package Chapter2;public class CallStorage 
{
static public int Storage(int x)
{

return x++;
}
public static void main(String[] args)
{
int x=0;
Storage(x);
System.out.print(x);
}}输出时0
目标是输出1
why?
tell me。thanks!

解决方案 »

  1.   

    static public int Storage(int x)
        {
            
            return x++;
        }
    这个方法是不能改变X的值的,LZ需要认真理解一下值传递与引用传递
      

  2.   

    这是传参的知识点。你传的是int的类型。基本数据类型,基本数据类型传的是值的备份,当值传完后,变量是变量,参数是参数,他们不相关,参数中值变了,可你打印输出的是变量的值。它的值是没有变的。所以打印出来是0.
      

  3.   

      去看一些java内存分析的东西,自然就明白了。
      

  4.   


    public static void main(String[] args)
        {
            int x=0;
            x = Storage(x);
            System.out.print(x);
        }
      

  5.   

    请将 x 设为 全局静态变量 试试 static int x
      

  6.   

    JAVA的参数传递都是值传递,值传递可以理解成拷贝一份,值本身不会被改变。
      

  7.   


    对于你编写的程序根本就不能实现你的意愿。1.对于前置++与后置++,我感觉你没有真正的理解。后置++是等语句执行之后,再对变量进行操作,而前置++则与其相反,所以要实现你的要求首先你应该将后置++改为前置++;2.你对函数调用掌握的不够扎实。在main函数中你虽然调用了Storage函数,但是对于返回来的值并没有进行保存起来待用。你可以试试下面的程序:
    package Chapter2;
    public class CallStorage 
    {
        static public int Storage(int x)
        {
            
            return ++x;
        }
        public static void main(String[] args)
        {
            int x=0;
            
            System.out.print(Storage(x));    }
    }
      

  8.   

    x++   
    先取X的值,   
    再做自加即X+1   
    ++x   
    先做自加操作即X+1   
    再取X的值你想要实现输出1的话就应该写成++x
      

  9.   

    static public int Storage(int x)
    这里面传的x的类型是int,属于值类型。
    你试试int[] x
      

  10.   

    lz好好找度娘问问,值传递跟引用传递。int放在常量池。方法结束后,依然是原先的值。
      

  11.   

    你那个X++是返回值,并不是把X的值增加一,懂吗孩子,你改成x = x + 1;试一试?
      

  12.   

    方法调用的四个过程:
    (1)为被调用方法分配临时空间。
    (2)将实参传值传给形参。
    (3)流程跳到被调用方法执行
    (4)执行完或者遇到return语句则流程返回主调方法,同时被调方法临时空间释放。
    把分配图画一下你就明白了
      

  13.   


    和楼主犯得错误不是一样的吗?
    LZ,你这么来一下:package Chapter2;public class CallStorage 
    {
        static public int Storage(int x)
        {       
            return x++;
        System.out.println("方法内部的X:"+x);   
        }
        public static void main(String[] args)
        {
            int x=0;
            Storage(x);
            System.out.print("主函数中的X:"+x);
        }}//看看结果是否让你如愿?
      

  14.   

    搜一下java传参方式看看吧,“值传递”“引用传递”public static void main(String[] args)
        {
            int x=0;
            x = Storage(x); //在这儿把方法返回值接收一下就能达到要求,否则执行完后仅是参数值副本
                               //变了,传过去的是参量x的值而不是参数x
            System.out.print(x);
        }
      

  15.   

    楼主这里把概念弄错了,调用方法时传的是“值”,而不是传的“参数”,所以经过方法里的操作是不会改变参数的。 让我们来看看你的代码:第一步:int x = 0 ;第二步:调用Storage()方法,注意这里是把x的值“0”传进去,而不是把“x”传进去,把0传到Storage()方法里面后,计算机会按照方法里面的代码执行一系列的操作(在你这儿就是0++),然后该方法会把结果返回来(也就是1,这个1是调用方法返回的结果);第三步:System.out.print(x),你在这里输出的是参数“x”而不是调用方法返回的值,而你在第一步定义的“x”又没有改变过,所以输出是你定义“x”时的初始值,即“0”。如果你想要得到“1”的结果的话这样做就行:把System.out.print(x)改成System.out.print(Storage(x))即可;当然你也可以:x = Storage(x)(把返回值赋给“x”);System.out.print(x)(输出改变后的“x”)。
      

  16.   


    这完全就是错误的逻辑,JAVA中没有引用传递的概念,只有值传递(PS:听一位老师说的),原生数据类型传值之后,你是你,我是我,互不干扰
      

  17.   

    顶olafo7!JAVA中没有引用传递的概念,只有值传递!
    我也是最近看书才明白过来的!哈哈!
      

  18.   

    稍改一下就可以了
    public class CallStorage {
    static public int Storage(int x) { return ++x;
    } public static void main(String[] args) {
    int x = 0;
    int y=Storage(x);
    System.out.print(y);
    }}
      

  19.   

    在java中基本类型都是值传递,只传递值的拷贝,lz可以这样达到你的预期:
        static public int Storage(int x)
        {
            
            return ++x;
        }    public static void main(String[] args)
        {
            int x = 0;
            x = Storage(x);
            System.out.println(x);
        }
      

  20.   

    Storage()方法有自己的栈,基本类型数据传输的都是数据的拷贝!
      

  21.   

    内存分析  楼主切记:int  x=0;  //此时在栈中分配一块内存; 名字叫x   值为  0
    调用函数时storage(x)// 此时执行函数:函数中有一个局部变量x   内存又会分配一块内存 并将全局变量x中值传入这个局部变量中 此时局部变量 值为   0;
    执行语句:return x++;  此时先将x=0返回  再执行 x++  最后x=1;此时函数执行结束 ,局部变量分配的内存要消失,即局部变量x=1 消失,但是呢  全局变量  x=0  没有影响,   所以呢  最后输出为0;
      

  22.   

    x=Storage(x);
    输出就是1了;
      

  23.   

    Storage方法执行完毕,里面的变量(引用)也就被回收率,int x=0;x的值并没有受到影响,除非你将x重新指向Storage方法的返回值;就输出的是1,不然就是0;