灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3252回复:0

Java中的值传递和传递

楼主#
更多 发布于:2012-09-08 09:47


当一个变量最为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和传递。
值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值


传递的特点:方法内部对传进去的参数作的改变也会影响方法外部的变量的值



那么哪些是值传递,哪些是传递呢?
基本类型(8种)的传递都是值传递
类型(除String外)都是传递
Strng比较特殊,它虽然是类型,但是却是值传递

通过一下例子来理解:
Student.java
[java]
package com.tianjf;

public class Student {
    private String name;

    public Student(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}
package com.tianjf;
public class Student {
private String name;
public Student(String name) {
  super();
  this.name = name;
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
@Override
public String toString() {
  return name;
}
}
Test.java
[java]
package com.tianjf;

public class Test {
    
    private static void changeInt(int i) {
        i = 1;
    }
    
    private static void changeStudent(Student student) {
        student.setName("李四");
    }
    
    private static void changeString(String str) {
        str = "456";
    }
    
    public static void main(String[] args) {
        int i = 0;
        String str = "123";
        Student student = new Student("张三");
        System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
        
        changeInt(i);
        changeStudent(student);
        changeString(str);
        System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
    }
}
package com.tianjf;
public class Test {

private static void changeInt(int i) {
  i = 1;
}

private static void changeStudent(Student student) {
  student.setName("李四");
}

private static void changeString(String str) {
  str = "456";
}

public static void main(String[] args) {
  int i = 0;
  String str = "123";
  Student student = new Student("张三");
  System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
  
  changeInt(i);
  changeStudent(student);
  changeString(str);
  System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
}
}
运行结果: www.atcpu.com
Before change:
i:0
student:张三
str:123
After change:
i:0
student:李四
str:123



从运行结果可以看出,int和String类型的值经过change方法后没有变,而student的值变了。
作者:tianjf0514



喜欢0 评分0
游客

返回顶部