Heim  >  Artikel  >  Java  >  Beispielcode für die gemeinsame Nutzung einer Parameterübergabemethode in Java

Beispielcode für die gemeinsame Nutzung einer Parameterübergabemethode in Java

黄舟
黄舟Original
2017-03-23 10:36:391829Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn