public class exec { /**
 * @param args
 */
  static void add(double x,double y){
  double z;
  z=x+y;
  System.out.println("z="+z);
  
  }
  static double add1(double y1,double y2){
  System.out.println(++y1+y2+2.9);
   return ++y1+y2+2.9;
  }
public static void main(String[] args) {
// TODO Auto-generated method stub
           double f1=2,f2=4;
           add(f1,add1(f1,f2));
}}输出为 9.9 和12.9 
问题  为什么是12.9? 值类型不是拷贝副本吗?

解决方案 »

  1.   

         System.out.println(++y1+y2+2.9);
               return ++y1+y2+2.9;return 回去的是10.9. 最后结果12.9.
    楼主认为应该是几?
      

  2.   

    ++y1是先自增1后再参与运算,故f1是经过了自增的,故,f1在运算时为3
      

  3.   

    楼主难道想问的是++i   和i++的区别?
    i++  先使用然后i+1 
    ++i  先i+1然后使用
      

  4.   

    楼主要知道,在add1方法中的y1,y2只是属于add1的局部变量,它们接收传过来的值2和4,在方法中做的运算,最后得到的y1,y2仍然是add1方法内才有效,并不会影响到传过来的参数。
    这和对象传过来地址是不一样的。