当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java入门

张龙老师面试:java方法参考 个人小结

    一:

    1 :如果参数是基本数据类型(四类八种:byte,short,int,long,double,float,double,boolean,char),

    那么传的是变量的值,例如: int a= 10; 那么传过去的就是10!

    例子:
 package qqwwffg.pass_method_paramater;
  public class PrimitiveType {
  public void change(int a) {
  a = 3;
  }
  public static void main(String[] args) {
  int a = 1;
  PrimitiveType test = new PrimitiveType();
  test.change(a);
  System.out.println(a); // 1 ,而不是3
  }
  }

    change 方法在被调用的时候,在内存中也分配一个空间来存储,存的是传过来的值,即3 .

    而当方法结束时,这块内存就等垃圾回收了,而在main 方法中,它打印的a 的值是在调用main

    方法时分配的内存空间,他们俩之间没有任何关系,所以打印的还是1.

    2 : 如果参数是引用数据类型(类,数组,接口),那么传的是也是变量的值,

    例如: Point param =new Point();

    那么传过去的是point 这个变量的值 ,而不是说Point 这个对象!

    而point 这个变量的值,其实就是Point 对象在内存中的地址(也叫引用)!

    例子:
 public class ReferenceType {
  public void changePoint(Point point) {
  point.x = 5;
  point.y = 6;
  }
  public void changeReference(Point point) {
  point = null;
  }
  public void testPassByStirng(String param) {
  param = "newValue";
  }
  public static void main(String[] args) {
  int a = 1;
  Point point = new Point(1, 2);
  ReferenceType test = new ReferenceType();
  test.changePoint(point);
  System.out.println(point.x); // 5 而不是 1
  System.out.println(point.y); // 6 而不是 2
  test.changeReference(point); // 调用这个后,下面是否会报空指针呢?
  int x = point.x; // 不会
  System.out.println("x 的值是 " + x );
  String param = "value";
  test.testPassByStirng(param);
  System.out.println(param); // 是value ,而不是 newValue
  }
  }
  class Point {
  int x;
  int y;
  public Point(int x, int y) {
  this.x = x;
  this.y = y;
  }
  }

    在java 中,访问对象是通过指向对象的引用来操作的,而一个对象可以被多个引用所指向,

    无论其中哪个引用对这个对象的内容进行修改,它都会影响到另外一个引用,虽然引用有多个,但

    对象却只有一个!

    changePoint 方法被调用时,你把main 方法中的Point 对象的引用point 传给了changePoint的参数

    point,此时,这个point 引用也指向了main 方法中的Point 对象(new 出来的),而你在这个方法中,

    用point 这个引用对Point 对象(new 出来的)的内容进行了修改(point.x = 5;point.y = 6;),

    因为它们指向的是同一个Point 对象(new 出来的),所以,当方法执行完后,这个修改会反映到这

    个对象上,而此时,你再打印出Point 对象的x,y 的值,都是被改变后的值! 即不再是1和2,而是5与6 .

    小结:

    在java 中,方法参数的传递永远都是传值,而这个值,对于基本数据类型,值 就是你赋给变量的那个值,而

    对于引用数据类型,这个值是对象的引用,而不是这个对象本身。

 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接