Java参数传递

        Java入门时我们都知道,Java对象的传递是引用传递,而基本类型是值传递。如下实例所示:

实例一:Map对象传递

package com.bijian.study;

import java.util.HashMap;
import java.util.Map;

public class TransmitMap {

    public static void main(String[] args) {
        
        Map map = new HashMap();
        map.put("name","zhangshan");
        map.put("age",25);
        
        TransmitMap m = new TransmitMap();
        m.printValue(map);
    }

    public void printValue(Map map) {
        System.out.println(map); //{age=25, name=zhangshan}
        changeValue(map);
        System.out.println(map); //{age=18, name=changed}
    }

    public void changeValue(Map map) {
        map.put("name", "changed");
        map.put("age", 18);
        System.out.println(map); //{age=18, name=changed}
    }
}

实例二:自定义对象传递

package com.bijian.study;

public class TransmitObject {

    public static void main(String[] args) {
        Employee employee = new Employee("zhangshan", 25);
        TransmitObject m = new TransmitObject();
        m.printValue(employee);
    }

    public void printValue(Employee employee) {
        System.out.println(employee); //zhangshan,25
        changeValue(employee);
        System.out.println(employee); //changed,18
    }

    public void changeValue(Employee employee) {
        employee.setName("changed");
        employee.setAge(18);
        System.out.println(employee); //changed,18
    }
}

class Employee {
    
    private String name;
    private int age;
    
    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    public String toString() {
        return this.name + "," + this.age;
    }
}

实例三:基本类型int值传递

package com.bijian.study;

/**
 * Java值传递
 */
public class TransmitInt {

    public static void main(String[] args) {
        int count = 1;
        TransmitInt m = new TransmitInt();
        m.printValue(count);
    }

    public void printValue(int count) {
        System.out.println(count); //1
        changeValue(count);
        System.out.println(count); //1
    }

    public void changeValue(int count) {
        count += 10;
        System.out.println(count); //11
    }
}

        但对于String类型的变量,到底是值传递还是引用传递呢?

package com.bijian.study;

public class TransmitString {

    public static void main(String[] args) {
        String str = "shengzhen";
        //String str = new String("shengzhen");
        TransmitString m = new TransmitString();
        m.printValue(str);
    }

    public void printValue(String str) {
        System.out.println(str); //shengzhen
        changeValue(str);
        System.out.println(str); //shengzhen
    }

    public void changeValue(String str) {
        str += "shanghai";
        System.out.println(str); //shengzhenshanghai
    }
}

        从实例运行结果来看,String类型的变量是值传递。

你可能感兴趣的:(java,值传递,引用传递)