黑马程序员技术交流社区

标题: 引用类型的传递 [打印本页]

作者: 冯伟    时间: 2012-9-27 17:51
标题: 引用类型的传递
本帖最后由 冯伟 于 2012-9-27 22:50 编辑
  1. class Demo{
  2. public static void main(String[] args){
  3. String num = new String("Hello world");
  4. String num1 = null;
  5. method(num1,num);
  6. System.out.println(num1);
  7. }
  8. public static void method(String f1,String f2){
  9. f1 = f2;
  10. }
  11. }
复制代码
从命令行接收参数,由于参数较多,所以在main中调用方法对参数进行判断,然后将参数分别赋给各个对象,但是在main中使用时却发现没赋值成功,不知道怎么回事,希望各位能提供解决办法
作者: 刘学    时间: 2012-9-27 18:17
class Demo{
public static void main(String[] args){
String num = new String("Hello world");
String num1 = null;  //num1是局部变量
method(num1,num);
System.out.println(num1);
}
public static void method(String f1,String f2){
  f1 = f2;  //f1和f2也是局部变量
      System.out.println(f1);   //在这里测试一下,已经传过来了,出错的原因是都是局部变量,f1和num1没什么关系,你只不过是把引用传给了f1,   num1还是原来的num1
  }
}

作者: 杨志男    时间: 2012-9-27 20:12
本帖最后由 杨志男 于 2012-9-27 20:13 编辑
  1. package com.ithima.practice;

  2. class Demo {

  3.         static String f1,f2,f3;

  4.         public static void main(String[] args) {
  5.                
  6.                 method("Holle"," the"," itheima");
  7.                 /*这个可以写成System.out.printf(f1,f2,f3);
  8.                  * 但这是个流
  9.                  * PrintStream java.io.PrintStream.printf(String format, Object... args),可以看下文档
  10.                  */
  11.                 System.out.print(f1);
  12.                 System.out.print(f2);
  13.                 System.out.println(f3);
  14.         }
  15.         public static void method(String x,String y,String z) {
  16.                 f1=x;f2=y;f3=z;
  17.         }
  18. }
复制代码
java的参数传递永远是值传递,传递的就是一个copy,这时有两个引用,一个是原来的一个是参数声明的,但是因为引用有两种类型,一种是基本数据类型的引用,他们的copy就是原值,1就是1,2就是2,相当于两个引用都各自有了自己的值,所以你在方法里改变的只是参数的值,跟传递前引用指向的值没有关系,二种是对象引用,他们的copy值是个地址,就是两个引用都指向一个地址,你改变这个地址或者改变这个地址里面的值都是实际改变传递之前的对象值
注意下静态成员之间的调用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2