首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一道关于java的基础知识题,请高手帮忙,多谢

2012-06-24 
一道关于java的基础知识题,请高手帮忙,谢谢public class Test16 {static void fermin(int i){i++}public

一道关于java的基础知识题,请高手帮忙,谢谢
public class Test16 {
  static void fermin(int i){
  i++;
  }
  public static void main(String args[]){
  Test16 t=new Test16();
  int i=0;
  t.fermin(i);
  i=i++;
  System.out.println(i);
   
  }
}


结果为什么不是2,而是0呢?

[解决办法]
i++ 和 ++i在运算顺序上是不一样的
就像你上面的 System.out.println(i);
程序会先打印i,再运算++
如果把上面的i++都改成++i
就会先运算++,再打印i了
结果就变成2了
[解决办法]

Java code
首先fermin的i++不影响main的i,因为两个方法的i是不同的变量所以int i=0;t.fermin(i); //此时i还是0,因为fermin的i++不影响main的ii=i++;//这里要知道执行的先后顺序,i++是先取得i的值作为表达式的值,然后i本身+1,       //=是把右边的表达式值赋给左边       //所以右边i++的值就是先取i的值0作为表达式的值,然后i本身+1,此时i为1      //然后=把右边的表达式的值0赋给左边,所以此时i又变成了0
[解决办法]
探讨

Java code
首先fermin的i++不影响main的i,因为两个方法的i是不同的变量
所以
int i=0;
t.fermin(i); //此时i还是0,因为fermin的i++不影响main的i
i=i++;//这里要知道执行的先后顺序,i++是先取得i的值作为表达式的值,然后i本身+1,
//=是把右边的表达式值赋给左边
//所以右边i++的值就是先取i……

[解决办法]
这是一个好题 但是我觉得还没有好的回复 坐等看好的回复!!
[解决办法]
好题啊 主要是i=i++;这句算术运算符的运算顺序要搞清楚赋值运算符最后执行!
[解决办法]
一、fermin方法不会改变main方法里的i的值,因为你在t.fermin(i)这里把i=0传过去fermin方法的时候,已经是复制了一个i对象了,fermin里面的i++改变的是i的复制而不是i本身。所以在t.fermin(i)这句之后 i仍然是0。
二、程序运行到i=i++这里,i仍然是0(如上一步所说)
这里可以理解为:
i = i;// i =0;
println(i);
i=1;//先打印,然后i再变成一
[解决办法]
探讨

谢谢你们!我知道i++与++i 的问题,我就是不明白这一点:为什么fermin的i++不影响main的i,以及怎样才能让它影响呢?

[解决办法]
如果要打印2
Java code
public class TestDemo{    static int add(int i)    {        [color=#FF0000]return[/color] ++i;    }        public static void main(String[] args)    {        int i = 0;        TestDemo testDemo = new TestDemo();        [color=#FF0000]i = testDemo.add(i);[/color]        i = ++i;        System.out.println(i);    }} 

热点排行