Compiler-Fehler Stringvariable ändern | Compiler warnung

Dit_

Bekanntes Mitglied
Hallo
Wollte schon immer wissen warum der Compiler an dieser Stelle warnt...

Java:
public void doit(String string) {
        string = string.trim();//hier warnung
        //...
}

Kompiler möchte das haben.

Java:
public void doit(String string) {
        String neuerString = string.trim();
        //...
}


Warum? :oops:

Danke schon mal
 

eRaaaa

Top Contributor
Und mit was "warnt" er dich? =)

/edit: Ok mein Fehler: "Wie lautet die Warnmeldung in deinem Eclipse denn GENAU?" :noe:
 
Zuletzt bearbeitet:

Dit_

Bekanntes Mitglied
na ja im Eclipse wird die Stelle gelb unterstrichen er der Compiler meint ich soll neue Variable definieren.
 

RySa

Bekanntes Mitglied
Ich hoffe dir ist bewusst, dass du den Inhalt des Originalstrings so nicht ändern kannst (call by Value). Wenn das nicht dein Ziel ist und du den String nur für die weiterverarbeitung dieses String ihn trimmen möchtest, weiß nicht wo dein Problem liegt (vermutlich bei der Syntax irgendwo) da es bei mir so einwandfrei funktioniert.
 

AlexSpritze

Bekanntes Mitglied
Bei NetBeans kann man auch einstellen, dass er diese Semantik als Warnung kennzeichnet. Die Beschreibung zu diesem Hint lautet:
Reports any instances of assignment to a variable declared as a method parameter. It also reports any attempt to increment or decrement the variable. While occasionally intended, this construct can be extremely confusing, and is often the result of a typo.

Also wenn du sowas hast:

Java:
public void method(String input)
{
String _input = "asdf";
....

for(char c : _input.toCharArray())
...
}

könnte schnell ein Typo zwischen input und _input geschehen, mal abgesehen von der Bezeichnung der Variablen ;)

Man könnte den Methodenparameter auch final deklarieren:
Java:
public void method(final String input){...}
 
Zuletzt bearbeitet:

Ariol

Top Contributor
Java:
public void doit(String string) {
        string = string.trim();
}

public void test() {
      String string = "  Hallo Welt!   ";
      System.out.println(string);
      doit(string);
      System.out.println(string);
}

Ausgabe:
Code:
  Hallo Welt!   
  Hallo Welt!

--------------------------------------------------------------

Java:
public String doit(String string) {
        return string.trim();
}

public void test() {
      String string = "  Hallo Welt!   ";
      System.out.println(string);
      string = doit(string);
      System.out.println(string);
}


Ausgabe:
Code:
  Hallo Welt!   
Hallo Welt!

--------------------------------------------------------------
 

Dit_

Bekanntes Mitglied
das es funktioniert ist ja klar. Und das man das abstellen kann ist auch klar.

Also ist es bloß "CodeStyle warnung", hat nichts mit performance zu tun?

P.S. kann in Eclipse das Häckchen nicht finden um die Warnung hier zu zitieren... :oops:
 

ARadauer

Top Contributor
Ich glaub Fowler schreibt auch im Refactoring Buch darüber...

Meiner Meinung nach ist es eigentlich kein Code Smell... gibt es wirklich Programmierer, die bei so einer Zeile denken, dass auch die Variable im aufrufenden Code geändert wird? Das kann mal einem Anfänger passieren, man sollte es aber schnell verstanden haben, dass dem nicht so ist...
 

RySa

Bekanntes Mitglied
Naja, vlt kann der Editor nicht unterscheiden ob es primitive Werte sind, die übergeben werden, oder Objekte, deswegen meldet er bei allem eine Warnung (da ja Objekte ByRef übergeben werden und somit so verändert werden können).
 
S

SlaterB

Gast
das Verändern an sich wird ja gerade eher nicht verhindert und auch final hat damit nichts zu tun,
das Verändern von Parametern geht, mal nützlich, mal weniger..,

es geht hier immer um Neuzuweisung der Variablen, da ist es egal ob Objekt oder primitiv,
in beiden Fällen hilft final, in beiden Fällen kann es dem Aufrufer schnuppe sein,
ich halte von der Warnung auch nicht so viel
 
M

Mitleserin

Gast
Weil er eine Tussi ist ;-)
Ich finde, dass solche Kommentare den höflichen und respektvollen Umgang in einem Forum stören. Auf einer Site wie dieser sind weibliche Mitglieder erfahrungsgemäß ohnehin seltener anzutreffen als männliche und wenn sie dann über derartige Sätze stolpern, werden sie vielleicht geneigt sein, ihre Besuche in diesem Forum noch weiter zu reduzieren.
 

Sonecc

Gesperrter Benutzer
Ich finde, dass solche Kommentare den höflichen und respektvollen Umgang in einem Forum stören. Auf einer Site wie dieser sind weibliche Mitglieder erfahrungsgemäß ohnehin seltener anzutreffen als männliche und wenn sie dann über derartige Sätze stolpern, werden sie vielleicht geneigt sein, ihre Besuche in diesem Forum noch weiter zu reduzieren.

Ohne nun eigentlich ins Off-Topic abdriften zu wollen, kann ich mich dennoch nicht zurückhalten:

Was bitte schön ist an der Aussage denn schlimm? Es wurde niemand beleidigt und es ist keinesfalls sexistisch oder ähnliches.
 

Ariol

Top Contributor
Ich glaub Fowler schreibt auch im Refactoring Buch darüber...

Meiner Meinung nach ist es eigentlich kein Code Smell... gibt es wirklich Programmierer, die bei so einer Zeile denken, dass auch die Variable im aufrufenden Code geändert wird? Das kann mal einem Anfänger passieren, man sollte es aber schnell verstanden haben, dass dem nicht so ist...

Das Problem ist glaube ich eher wenn Attribute innerhalb der Variable geändert werden.
Dieser Code hier...
Java:
public class ValueTest 
{
	int a;
	public ValueTest(int a) {
		this.a = a;
	}
	
	public static void edit1(ValueTest v)
	{
		v = new ValueTest(-1);
	}
	
	public static void edit2(ValueTest v)
	{
		v.a = -1;
	}
	
	public static ValueTest edit3(ValueTest v)
	{
		v = new ValueTest(-1);
		return v;
	}
	
	public static void edit4(final ValueTest v)
	{
		v.a = -1;
	}	
	
	public static void main(String[] args) {
		ValueTest a1 = new ValueTest(1);
		ValueTest a2 = new ValueTest(1);
		ValueTest a3 = new ValueTest(1);
		ValueTest a4 = new ValueTest(1);
		
		edit1(a1);
		edit2(a2);
		a3 = edit3(a3);
		edit4(a4);

		System.out.println(a1.a);
		System.out.println(a2.a);
		System.out.println(a3.a);
		System.out.println(a4.a);
	}
}

... gibt das aus:
Code:
1
-1
-1
-1
 

Dit_

Bekanntes Mitglied
Ich finde, dass solche Kommentare den höflichen und respektvollen Umgang in einem Forum stören. Auf einer Site wie dieser sind weibliche Mitglieder erfahrungsgemäß ohnehin seltener anzutreffen als männliche und wenn sie dann über derartige Sätze stolpern, werden sie vielleicht geneigt sein, ihre Besuche in diesem Forum noch weiter zu reduzieren.

ehmm... ja... wir sind alle untröstlich... :lol: :oops:
 

ARadauer

Top Contributor
Achtung!!!
Naja, vlt kann der Editor nicht unterscheiden ob es primitive Werte sind, die übergeben werden, oder Objekte, deswegen meldet er bei allem eine Warnung (da ja Objekte ByRef übergeben werden und somit so verändert werden können).
ja verändern kann man Objekte schon, aber natürlich nicht die Referenz! die Zuweisung wirst du drausen nie mitbekommen ob es jetzt nun 5, "BIER" oder dein wichtigestes Kundenobjekt war..

, werden sie vielleicht geneigt sein, ihre Besuche in diesem Forum noch weiter zu reduzieren.
tja ich bin untröstlich :gaen:
 
M

Mitleserin

Gast
Sonecc, ich habe ARadauers Beitrag so verstanden, dass ein Compiler, der Warnungen wirft, vergleichbar sei mit einer nervigen pingeligen Frau, die unnützes Gewäsch von sich gibt. Einen solchen Vergleich empfinde ich persönlich als sexistisch. Macht es das für dich klarer?

ehmm... ja... wir sind alle untröstlich... :lol: :oops:
tja ich bin untröstlich :gaen:
Wow… Das finde ich einfach nur krass, wie auf einen vollkommen sachlichen Kommentar von mir das Niveau hier so nach unten ausschlägt.
 
A

anonym2

Gast
*edit (besser entfernt..)*

Auf einer Site wie dieser sind weibliche Mitglieder erfahrungsgemäß ohnehin seltener anzutreffen

Das stimmt, aber was würde sich ändern, wenn dem nicht so wäre?

(Ich stelle konfuse/verworrene Fragen. :D )
 

Murray

Top Contributor
Ich finde, dass solche Kommentare den höflichen und respektvollen Umgang in einem Forum stören. Auf einer Site wie dieser sind weibliche Mitglieder erfahrungsgemäß ohnehin seltener anzutreffen als männliche und wenn sie dann über derartige Sätze stolpern, werden sie vielleicht geneigt sein, ihre Besuche in diesem Forum noch weiter zu reduzieren.

Würde hier ewig diskutiert werden, wenn statt "Tussi" an dieser Stelle "Weichei" stünde (was m.E. ebenfalls nicht wirklich bedeutungsgleich mit dem - an dieser Stelle eher angemessenen - "überempfindlich" wäre?
 

mvitz

Top Contributor
Ich schreib dann einfach noch mal was zum Topic ;)

Ich kann verstehen, wieso da eine Warnung geschmissen wird, angenommen man hat eine etwas längere Methode, kennt aber die Parameter-Variablen Namen. Jetzt wird genau so eine Variable weiter unten an eine andere Methode übergeben. Hierbei übersieht man jetzt schnell, dass es sich gar nicht mehr um das Argument der Methode, sondern bereits um eine neue Variable handelt.
 

Dit_

Bekanntes Mitglied
... nervigen pingeligen Frau, die unnützes Gewäsch von sich gibt. Einen solchen Vergleich empfinde ich persönlich als sexistisch. Macht es das für dich klarer?

also jetzt mal im Ernst, das war ganz bestimmt nicht böse gemeint, und dieser scherzhafte Vergleich ist bestimmt nur wenigen aufgefallen... Aber dank dir, ist es jetzt zum Hauptthema des Threads geworden. Bravo! :bahnhof:

nervigen pingeligen Frau, die unnützes Gewäsch von sich gibt
du muss dich doch nicht gleich angesprochen fühlen :pueh:

:oops:
 
M

maki

Gast
ARadauer ist Österreicher, die haben kürzlich sogar ihre Nationalhymne korrigiert im Sinne der Gleichberechtigung.
Natürlich sind Tussis nicht weniger schlecht als Weicheier, man sollte schon ein "equal opportunity offender" sein, also jemand der alle Seiten abwechselnd gleich beleidigt, schon der Balance wegen.

Zum Thema:
Parametern neue Werte zuzuweisen ist schlechter Stil, kann zu schwer auffindbaren Bugs führen, Andi_CH hatte vor ein paar Monaten so ein Beispiel.
Wenn die Parameter als final deklariert werden, wird aus einer Warnung ein Error.

Es kostet nix da eine neue Variable einzuführen, ausser eine Zeile Code.
Java:
String trimmedString = string.trim();
 
T

Tomate_Salat

Gast
@Mitleserin: Naja. Hier wurde wieder aus einer Mücke ein Elefant gemacht.

Es kostet nix da eine neue Variable einzuführen, ausser eine Zeile Code.
Java:
String trimmedString = string.trim();

In diesem Falle nicht einmal. Imho sollte man Parameter, auch wenn sie nicht final sind, so behandeln.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Stringvariable in Datei speichern? Java Basics - Anfänger-Themen 2
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
B Variablen Int Variabel in JTextField ändern Java Basics - Anfänger-Themen 2
W Methode ändern Java Basics - Anfänger-Themen 65
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
B Filepath "ändern"? Java Basics - Anfänger-Themen 5
t2im Java Array-Länge ändern? Java Basics - Anfänger-Themen 22
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
amelie123456 Geschwindigkeit der Methode bewegeDich eines Objekts ändern Java Basics - Anfänger-Themen 2
P Standard resources-Verzeichnis ändern Java Basics - Anfänger-Themen 9
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
J Itext-Paragraph Position ändern Java Basics - Anfänger-Themen 13
Z Attribut ändern ohne Kontrollstruktur Java Basics - Anfänger-Themen 2
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
V Umgebungsvariable Genutzte Javaversion in der Konsole ändern Java Basics - Anfänger-Themen 5
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
M Programm per Nutzereingabe ändern Java Basics - Anfänger-Themen 3
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
L Java Date Format ändern Java Basics - Anfänger-Themen 5
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
F Schriftgröße ändern Java Basics - Anfänger-Themen 2
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
J Kapselung Array in Set ändern und in Main ausgeben lassen Java Basics - Anfänger-Themen 4
D scheduledAtFixedRate speed ändern Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
Henri Erste Schritte Iteration ändern Java Basics - Anfänger-Themen 12
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Cursor ändern Java Basics - Anfänger-Themen 8
B Eclipse Tabellen Farbe ändern? Java Basics - Anfänger-Themen 2
I Ordnung JLayeredPane mit Button ändern Java Basics - Anfänger-Themen 5
S Array Eintrag ändern Java Basics - Anfänger-Themen 6
J variablePathPart ändern nach dem Ordner abgearbeitet worden ist Java Basics - Anfänger-Themen 1
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
M im String Alphabet ändern Java Basics - Anfänger-Themen 3
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
T Parameter das übergeben wurde ändern? Java Basics - Anfänger-Themen 1
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
Hijo2006 Eclipse: Java Icon ändern Java Basics - Anfänger-Themen 9
S Schriftart/Farbe im Grafikfenster ändern Java Basics - Anfänger-Themen 8
G BenutzerDaten teilweise ändern in txt Datei Java Basics - Anfänger-Themen 10
J Button in anderer Klasse ändern Java Basics - Anfänger-Themen 3
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
R Vererbung Variable in einem übergeordneten Objekt ändern Java Basics - Anfänger-Themen 4
R JTextArea final Status ändern Java Basics - Anfänger-Themen 11
W Methoden Methode auf Array aufrufen, und dieses Array dabei ändern? Java Basics - Anfänger-Themen 10
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
J Klassen Klassenmethode um Variable zu ändern Java Basics - Anfänger-Themen 7
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
D Eigenschaften eines Objektes ändern Java Basics - Anfänger-Themen 1
D Opencsv-3.5 DEFAULT_DATE_FORMAT ändern Java Basics - Anfänger-Themen 8
M Erste Schritte Code zur Laufzeit ändern lassen Java Basics - Anfänger-Themen 3
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
U Tabelle ändern und die Inhalte speichern Java Basics - Anfänger-Themen 9
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
Z JLabel Icon ändern Java Basics - Anfänger-Themen 2
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
N Variablen ändern wenn eine andere geändert wird Java Basics - Anfänger-Themen 7
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
Z System(einstellungen) per Java ändern/Steuern | Betriebssystembezogen Java Basics - Anfänger-Themen 7
W Klassen Variable einer anderen Klasse ändern (Threads) Java Basics - Anfänger-Themen 3
E Systemzeit ändern Java Basics - Anfänger-Themen 7
W Konsolenprograamm in GUI-Programm ändern Java Basics - Anfänger-Themen 1
D JLabel ändern in actionperformed Java Basics - Anfänger-Themen 2
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
D Werte von Variablen über Methode ändern Java Basics - Anfänger-Themen 10
Jackii Globale Variable aus anderer Klasse ändern... Java Basics - Anfänger-Themen 4
llabusch Interface Layout eines Labels während der Laufzeit ändern Java Basics - Anfänger-Themen 0
S Variablen Variable bei drücken eines Buttons ändern Java Basics - Anfänger-Themen 1
J Drucker parameter ändern Java Basics - Anfänger-Themen 9
J Eingabesprache mit Java ändern Java Basics - Anfänger-Themen 3
S Klassentyp zur Laufzeit ändern? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben