现在的位置: 首页 > 综合 > 正文

Java 面试之2 String 参数传递

2013年02月12日 ⁄ 综合 ⁄ 共 1053字 ⁄ 字号 评论关闭

public class ParamExam {
 public void  changePoint(Point point)
 {
  point.x = 5;
  point.y = 6;  
 }
 public static void main(String[] args)
 {
  Point point = new Point(1,2);
  ParamExam pe = new ParamExam();
  pe.changePoint(point);
  
  // 问题,打印结果是什么,说明原因
  System.out.println(point.x);
  System.out.println(point.y);
  
  /**
   * 在java中,对于方法的参数传递,不管是原生数据类型还是引用数据类型, 一律是传值(pass by value)
   *当执行到pe.changePoint(point)这行时,在main方法中的point是一个Java对象,即引用
   *接着point 传递到changePoint方法,changePoint方法参数本身是一个point对象,由于第9行代码中point是从main方法中传过来的,
   *传过来的是一个Java对象,也就是引用,两个对象指向同一个引用
   *在Java中,两个对象指向同一个引用,只要一个对象引用改变(就是内存地址改变),另外一个也将改变,
   *因此,在changePoint方法里,point.x,y值已改变,在changePoint方法外,那个point也将跟着改变属性值
   *结果为5,6
   */
 }
}

class Point
{
   int x;
   int y;
  
   public Point(int x,int y)
   {
    this.x = x;
    this.y = y;
   }
}

---------------------------------------------------------------------

又一个示例,这个是演示String 参数传递

public class ParamExam2 {
 public void changeString(String str) {    str = "abc";   }
 public static void main(String[] args)
 {
  String str = "xyz";
  ParamExam2 pe = new ParamExam2();
  pe.changeString(str);
  System.out.println(str);
 }
}

//  打印结果为 xyz

抱歉!评论已关闭.