Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Java Warum ändert ein als Referenz übergebener String seinen Wert nicht?

Warum ändert ein als Referenz übergebener String seinen Wert nicht?

Feb 09, 2024 pm 04:00 PM

In PHP sind Strings unveränderlich. Dies bedeutet, dass der Wert einer Zeichenfolge nicht mehr geändert werden kann, sobald sie erstellt wurde. Wenn wir eine Zeichenfolge als Referenz übergeben, übergeben wir tatsächlich eine Kopie der Zeichenfolge und nicht die ursprüngliche Zeichenfolge selbst. Daher haben Änderungen an der Kopie keinen Einfluss auf den Wert der Originalzeichenfolge. Hierbei handelt es sich um einen von PHP entwickelten Schutzmechanismus, der die Unveränderlichkeit von Zeichenfolgen und die Sicherheit von Daten gewährleistet. Unabhängig davon, wie wir also versuchen, den Wert einer Zeichenfolge durch Referenz zu ändern, erstellen wir tatsächlich eine neue Zeichenfolge und weisen sie der Referenzvariablen zu, während der Wert der ursprünglichen Zeichenfolge unverändert bleibt.

Frageninhalt

Warum ändert der folgende Code nur den Wert des Arrays t 中的值,并且不更改字符串 s? Ich habe erwartet, dass sich der String aufgrund seiner Objekteigenschaften auch ändern würde.

class A {
    private int i = 0;
    private String s = "";
    private int[] t = new int[1];

    void m() {
        B.m(i, s, t);
    }

    @Override
    public String toString() {
        return "i=" + i + ", s=" + s + ", t[0]=" + t[0];
    }
}

class B{
   public static void m(int i, String s, int[] t){
      i += 1;
      s += "1";
      t[0] += 1;
   }  
}

public class Zad {

   public static void main( String [ ] args ){
      A a = new A() ;
      System.out.println(a);
      a.m();
      System.out.println(a);
   } 
}
Nach dem Login kopieren

Workaround

Das passiert in Ihrem Code: Wenn Sie in Java einen primitiven Typ (wie int) an eine Methode übergeben, übergeben Sie den Wert selbst. Alle Änderungen an Parametern innerhalb einer Methode wirken sich nicht auf die ursprünglichen Werte außerhalb der Methode aus. Dies wird als „Wertübergabe“ bezeichnet. Das wissen Sie wahrscheinlich schon.

Lokale Variablen in der Klasse b 的定义中,ist 是方法 m(). Dies bedeutet, dass Änderungen an diesen Variablen keinen Einfluss auf die ursprünglichen Werte im aufrufenden Code haben.

Wenn Sie eine Instanzmethode a.m(); in der Hauptmethode aufrufen:

A a = new A();
System.out.println(a);  // Output: i=0, s=, t[0]=0
a.m();
System.out.println(a);  // Output: i=0, s=, t[0]=1
Nach dem Login kopieren

Sie werden sehen t[0] 的值已更改,因为 java 中的数组是对象,对其元素的修改会反映在方法外部。但是,is 的值保持不变,因为它们是原始类型或不可变对象(如 string) und alle Änderungen, die innerhalb der Methode daran vorgenommen werden, sind lokal und haben keinen Einfluss auf den ursprünglichen Wert.

Das obige ist der detaillierte Inhalt vonWarum ändert ein als Referenz übergebener String seinen Wert nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)