In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erklärung der Parameterübergabemethoden in Java vorgestellt. Freunde, die sie benötigen, können sich auf
Detaillierte Erklärung der Parameterübergabemethoden in Java beziehen
Java Ein klassisches Thema für Anfänger. Dieser Artikel soll dieses Thema beenden. In Java gibt es ein Sprichwort: Wie ist dieser Satz zu verstehen? Ich fürchte, es ist nicht einfach, es mit Worten zu erklären, und es ist wahrscheinlich schwer, es klar zu verstehen.
Prämisse
Lassen Sie mich zunächst klarstellen, dass das Konzept von Wert oder Referenz aus der Sprache C++ stammt. Referenz ist kein Wort im chinesischen Wörterbuch, sondern C++ Konzept – Erinnern Sie sich an das Symbol „&“?
Warum gibt es dieses Thema? Erstens gibt es ein unvollständiges Verständnis von Pass-by-Reference; zweitens treffen viele Java-Bücher und Diskussionsargumente nicht ins Schwarze.
In einem Satz: Ob Parameter als Wert oder als Referenz übergeben werden sollen, da es sich um eine Parameterübergabemethode handelt, gilt sie nur für formale Parameter und tatsächliche Parameter. Wir sprechen hier von den Parametern selbst, nicht das Unterobjekt oder Enkelobjekt des Parameterobjekts.
Geben Sie mit der Prämisse den C++-Code ein:
#include <iostream> using namespace std; class User { private: int m_id; public: User(int id=0){m_id = id;} void setId(int id){m_id = id;} int getId(){return m_id;} }; void test0(User t){//按值传参 User s; t = s; t.setId(1002); cout << "test1:" << t.getId() << endl; } void test1(User *t){//按值传参 t = new User();//指针指向了一个新对象,外面实参没变 t->setId(1002); cout << "test1:" << t->getId() << endl; } void test2(User* & t){//按引用传参 t = new User();//指针指向了一个新对象,外面实参也跟着变了 t->setId(1002); cout << "test2:" << t->getId() << endl; } int main(int argc, char const *argv[]) { cout<< "\npass by ref:"<<endl; User* t = new User(); t->setId(1001); cout << t->getId() << endl; test2(t); cout << t->getId() << endl; cout<< "\npass by value:"<<endl; t = new User(); t->setId(1001); cout << t->getId() << endl; test1(t); cout << t->getId() << endl; return 0; }
Ausgabeergebnis:
pass by ref: 1001 test2:1002 1002 pass by value: 1001 test1:1002 1001
C++-Zusammenfassung:
wird als Wert übergeben, dann werden die formalen Parameter innerhalb der Funktion so geändert, dass sie auf ein neues Objekt zeigen, und die externen tatsächlichen Parameter werden nicht beeinflusst.
Übergabe als Referenz, dann werden die formalen Parameter innerhalb der Funktion so geändert, dass sie auf ein neues Objekt verweisen, und die externen tatsächlichen Parameter werden ebenfalls geändert.
Um das Problem zu veranschaulichen, weist der Code möglicherweise einen Speicherverlust auf.
Java verwenden:
package com.pollyduan.bean; @Data public class User { private Integer id; public static void testObject(User t){ t=new User();//指向了一个新对象,外面实参没变 t.setId(1002); System.out.println("testObject="+t); } @Test public void testObject(){ User user=new User(); user.setId(1001); System.out.println("user="+user); testObject(user); System.out.println("user="+user); } }
Ausgabeergebnis:
user=User(id=1001) testObject=User(id=1002) user=User(id=1001)
Java-Zusammenfassung:
Vergleichen Sie es mit der Logik von C++ und treffen Sie die Entscheidung bitte selbst.
Das obige ist der detaillierte Inhalt vonBeispielcode für die gemeinsame Nutzung einer Parameterübergabemethode in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!