AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Java: String Objekt

Ein Thema von Antigo · begonnen am 23. Jul 2009 · letzter Beitrag vom 23. Jul 2009
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Java: String Objekt

  Alt 23. Jul 2009, 15:02
Hi,
schreibe am Montag ne Klausur in Objekt Orientierter Programmieren in Java und kenne leider kein Java Forum, hoffentlich kann mir trotzdem jemand weiterhelfen.

Es geht um folgendes. Methodenaufrufe sind in Java ja ausschließlich Call by Value. Da bis auf die elementaren Datentypen alle Datentypen Objekte sind und man bei einem Methodenaufruf daher immer eine Referenzvariable übergibt hat man im Prinzip dann aber doch Call by Reference und kann in einer Methode ein Objekt so verändern, dass ausserhalb der Methode die Änderungen auch wirksam sind (da man ja auf dem Objekt arbeitet).

So jetzt gehört String aber nicht zu den elementaren Datentypen, sondern ist eine Klasse. Deshalb dachte ich eigentlich, wenn ich einen String an eine Methode übergebe und ihn dort verändere, so ändere ich ja etwas am String Objekt und wenn ich jetzt ausserhalb der Methode darauf zugreife sind die Änderungen dort ebenso wirksam gewesen.

Hab das ganze dann einmal mit der Standard String Klasse, und einmal mit einer eigenen ausprobiert:

Delphi-Quellcode:
class MyString{
   String str;
}


public class Test {
   
   static void manipulate(String a){
      a="LOL";
   }

   
   static void manipulate(MyString a){
      a.str="LOL";
   }

   
   public static void main(String[] args){
      String test=new String("Hallo");
         manipulate(test);
      System.out.println(test);
      
      MyString test1=new MyString();
      test1.str="Hallo";
      manipulate(test1);
   System.out.println(test1.str);
   }

}
Nur ist es so, dass das erste println "Hallo" ausgibt, das zweite aber wie erwartet "LOL". Kann mir jemand diese Sonderstellung des String Objektes erklären?


edit: Ich glaub ich habs schon gefunden. Mit a="LOL"; erzeuge ich ja ein neues String Objekt auf das die Referenzvariable a zeigt. Diese ist aber nur eine Kopie der Referenzvariable die auf Test zeigt (Call by Value eben), so dass sich ausserhalb der Methode natürlich nichts verändert.
Hatte das ganze auch mit a.concat("..."); probiert, also dem String etwas anzuhängen versucht, aber wie ich grad gelesen hab wird dabei auch nur ein neuer String zurückgegeben und nicht der alte verändert.

Toll wie es manchmal hilft sein Problem in nem Forum zu posten nur um es dann 2 Minuten später selbst zu lösen
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Java: String Objekt

  Alt 23. Jul 2009, 15:31
Hi!

Deine Erklärung trifft es an sich ganz gut.
Als weiteres Stichwort für Google o.ä. sei gesagt: String in Java ist immutable

Auch hier könntest du noch nachlesen (allgemein sehr gut für Java-Fragen):
http://openbook.galileocomputing.de/...sel_04_002.htm


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Java: String Objekt

  Alt 23. Jul 2009, 15:49
Das hier erzeugt unnötige String Objekte:
String test=new String("Hallo"); ein paar Zeilen weiter ist es dann aber richtig gemacht, der Java-Compiler erkennt Strings im Quelltext einfach an den Anführungszeichen:
test1.str="Hallo"; Siehe z.B. in "Effective Java" oder unter http://stackoverflow.com/questions/3...ew-stringsilly

Cheers,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz