面试题一

package com.foreign;
public class Inc { 
     public static void main(String[] args) { 
        Inc inc =  new Inc(); 
        int i = 0; 
        inc.fermin(i); 
        i= i ++; 
        System.out.println(i);
    
    
     void fermin(int i){ 
        i++; 
    
}
 
sout 输出是多少?
---------------------------------------------------------------------------------摘自牛客网------------------------------------------------------------------------------
i++      先赋值在计算结果;
++i      先计算结果再赋值。
int i = 0;  
       i = i ++;  // 左边这个i其实是障眼法,就是一个中间变量,可以和下行的i合并;
       System.out.println(i);   这里等价于:
   int i = 0;
         System.out.println(i++);   这下再看,先赋值(先将i传给println函数打印出来,在计算表达式结果)
所以打印出来的是0,实际上整个表达式的结果已经是1了,只是没有打印出整个表达式的结果。
所以我们知道如下结论:
1、无论怎么变,i++和++i的整个表达式的结果都是1.
2、有时我们打印的是 表达式的结果(System.out.println(++i)),
      有时我们打印的只是一个 中间变量(System.out.println(i++))。
Ps:
int i = 0;  
i++;
System.out.println(i);  //值为1    打印的是表达式的结果

int i = 0;  
++i;
System.out.println(i);  //值为1     打印的是表达式的结果 

int i = 0;  
i = i++;
System.out.println(i);  //值为0      打印的是中间变量(JVM中间缓存变量机制)

int i = 0;  
i = ++i;
System.out.println(i);  //值为1    打印的是表达式的结果

猜你喜欢

转载自www.cnblogs.com/fangke/p/9317235.html