Java 参数传递:按值传递和按地址传递

结论:

1.参数为基础类型(int,long,short等)时,本质为值传递,即对参数的任何操作都不会对原数据有影响。
2.参数为对象(实例化new出来的)时,本质为引用传递,参数地址指向原数据地址,即任何操作都是在操作原数据。

JAVA 演示功能代码:

import com.zzg.entity.Person;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;

public class TransferTest {
    public static void main(String[] args) {
        String str = "Hello Java 8";
        /**
         * 基本类型按值传递
         */
        System.out.println("str update before:" + str);
        updateString(str);
        System.out.println("str update after:" + str);

        Person person = new Person();
        person.setName("zzg");
        person.setAge(30);
        person.setHeight(2);

        /**
         * 对象类型:按照地址传递
         */
        System.out.println("person update before:" + person.toString());
        updatePerson(person);
        System.out.println("person update after:" + person.toString());

        /**
         * 对象类型:传递对象不修改原有对象通过,实现Cloneable 接口,覆写Object.clone() 方法实现。
         */
        System.out.println("clone person update before:" + person.toString());
        cloneUpdatePerson(person);
        System.out.println("clone person update after:" + person.toString());
    }

    public static void updateString(String str) {
        str = "Hello Python3";
    }

    public static void updatePerson(Person person) {
        person.setName("zzy");
        person.setAge(2);
        person.setHeight(1);
    }

    public static void cloneUpdatePerson(Person person) {
        Person clonePerson = null;
        try {
            clonePerson = (Person) person.clone();
        } catch (CloneNotSupportedException e) {
            System.out.println("Person clone Object is failed");
           return;
        }
        clonePerson.setName("zzy");
        clonePerson.setAge(2);
        clonePerson.setHeight(1);

    }

}
package com.zzg.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person implements Cloneable {
    private String name;

    private Integer age;

    private Integer height;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

运行结果:

str update before:Hello Java 8
str update after:Hello Java 8
person update before:Person(name=zzg, age=30, height=2)
person update after:Person(name=zzy, age=2, height=1)
clone person update before:Person(name=zzy, age=2, height=1)
clone person update after:Person(name=zzy, age=2, height=1)

猜你喜欢

转载自blog.csdn.net/zhouzhiwengang/article/details/130682682
今日推荐