Java parameter passing: pass by value and pass by address

in conclusion:

1. When the parameter is a basic type (int, long, short, etc.), the essence is value transfer, that is, any operation on the parameter will not affect the original data.
2. When the parameter is an object (from instantiation of new), it is essentially passed by reference, and the parameter address points to the original data address, that is, any operation is operating on the original data.

JAVA demo function code:

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();
    }
}

operation result:

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)

Guess you like

Origin blog.csdn.net/zhouzhiwengang/article/details/130682682