Übergabe von Java-Parametern: Übergabe nach Wert und Übergabe nach Adresse

abschließend:

1. Wenn der Parameter ein Basistyp ist (int, long, short usw.), liegt das Wesentliche in der Wertübertragung, dh jede Operation am Parameter hat keinen Einfluss auf die Originaldaten.
2. Wenn der Parameter ein Objekt ist (aus der Instanziierung eines neuen), wird er im Wesentlichen als Referenz übergeben, und die Parameteradresse zeigt auf die ursprüngliche Datenadresse, d. h. jede Operation arbeitet mit den Originaldaten.

JAVA-Demo-Funktionscode:

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

Operationsergebnis:

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)

Ich denke du magst

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