Java passé par référence ou de valeurs

concept

  1. Pointeurs et références

    D'abord java est pas un concept de pointeur, mais il est en c ++ pointeurs (*) et référence (&) concept, n'est pas très bonne distinction, mais la méthode d'échange, par exemple, alors les deux peuvent atteindre l'objectif de l'échange. Afin de mieux distinguer mon premier jeu

    Pointeur: directement sur les données, toutes les modifications sont directement modifier les données (mais en fait, est un pointeur vers l'objet, la valeur des données d'adresse stockées)

    Référence: données de référence est modifiée par un intermédiaire variable indirectement par l'intermédiaire des valeurs de données modifiées variables intermédiaires

  2. Et la transmission des valeurs passées par référence

    Je pense qu'il a été passé par référence sont passés par valeur et par fonction d'échange en fonction des cours universitaires, donc je pense que

    La valeur est transmise: aucun argument et les paramètres associés, un procédé est analogue deux variables, mais la même valeur

    Passés par référence: les arguments et les paramètres associés, la même adresse peut être une méthode deux variables analogues dans le même objet, mais pas le même nom de référence, mais la valeur de référence est

exemple

  1. valeur de transfert
public class Test {
    public static void main(String[] args) {
        int val = 20;
        Test.test(val);
        System.out.println("实参:" + val);
    }

    private static void test(int val) {
        val = 10;
        System.out.println("形参:" + val);
    }
}

Pour les variables de base, les arguments et les paramètres ne sont pas associés, effet complémentaire de la sortie

Paramètre: 10
arguments: 20

  1. Passé par référence
public class Test {
    public static void main(String[] args) {
        Stu stu = new Stu();
        stu.setAge(20);
        stu.setName("test");
        Test.test(stu);
        System.out.println("实参:" + stu);
    }

    private static void test(Stu stu) {
        stu.setName("test2");
        stu.setAge(10);
        System.out.println("形参:" + stu);
    }
}

class Stu {
    String name;
    int 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;
    }

    @Override
    public String toString() {
        return "Stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Stu est un objet, en raison de référence passé, les paramètres réels et formels pointent à la même adresse, si le paramètre en modifiant les données, les données pointée par l'argument peut aussi changer, car un point à la même adresse, si la sortie

Paramètre: Stu {name = 'test2' , age = 10}
Argument: Stu {name = 'test2' , age = 10}

  1. Passé par référence
public class Test {
    public static void main(String[] args) {
        Stu stu = new Stu();
        stu.setAge(20);
        stu.setName("test");
        Test.test(stu);
        System.out.println("实参:" + stu);
    }

    private static void test(Stu stu) {
        stu = new Stu();
        stu.setName("test2");
        stu.setAge(10);
        System.out.println("形参:" + stu);
    }
}

class Stu {
    String name;
    int 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;
    }

    @Override
    public String toString() {
        return "Stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

même code, mais plus que la rangée supérieure stu = new Stu();, mais cette fois le paramètre modifié du point, où le paramètre modifié, ne modifie pas les données, après avoir modifié les points de paramètre à une nouvelle adresse, de sorte que l'argument déconnecter l'association, de sorte que le résultat est

Paramètre: Stu {name = 'test2' , age = 10}
Argument: Stu {name = 'test' , age = 20}

  1. Passé par référence
public class Test {
    public static void main(String[] args) {
        String val = "20";
        Test.test(val);
        System.out.println("实参:" + val);
    }

    private static void test(String val) {
        val = "10";
        System.out.println("形参:" + val);
    }
}

Pour l'objet String, parce qu'il est une finale, donc quel que soit modifié de tout changement dans le fonctionnement des nouvelles données est dans un pool de chaîne, parce qu'il n'y a pas d'utilisation nouvelle, donc pointent piscine Chaîne constante, et un lien vers le « 10 « un point de » 20 "

conclusion

A partir des exemples ci - dessus 3 et 4 , nous voyons le processus si le type de référence du paramètre dans un « = » Cette opération, la connexion est débrayée arguments, les paramètres, tout changement ne se produit pas, il est à noter .

Donc, ma conclusion est que les types passés par valeur, le type de référence d'objet. Je lis beaucoup de valeur à dire est passé, en fait, qui fait également sens, mais chacun a sa propre compréhension, pour résoudre les problèmes de production sur la ligne.

Je suppose que tu aimes

Origine www.cnblogs.com/colin-xun/p/12656773.html
conseillé
Classement