Paso de parámetros Java: pasar por valor y pasar por dirección

en conclusión:

1. Cuando el parámetro es de tipo básico (int, largo, corto, etc.), la esencia es la transferencia de valor, es decir, cualquier operación sobre el parámetro no afectará los datos originales.
2. Cuando el parámetro es un objeto (de instanciación de nuevo), se pasa esencialmente por referencia y la dirección del parámetro apunta a la dirección de datos original, es decir, cualquier operación está operando en los datos originales.

Código de la función de demostración 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();
    }
}

resultado de la operación:

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)

Supongo que te gusta

Origin blog.csdn.net/zhouzhiwengang/article/details/130682682
Recomendado
Clasificación