x /= n : Verstehe ich nicht.

nbergmann

Aktives Mitglied
int x = 25;
int n = 3;
x /= n;
Könnt ihr mir die 3. Zeile erklären?
Für das nächste Mal:
Wie finde ich die Antwort auf eine derartige Frage in Eclipse oder JShell?
 
K

kneitzel

Gast
Was sich bei so Fragen immer anbietet: Google.

Also in Googe z.B. nach "Java /=" suchen und schon bekommst du entsprechende Treffer.
 

Robert Zenz

Top Contributor
x/= n ist das gleiche wie x = x /n
Ich bin hier der Pedant und muss sagen dass das so nicht ganz stimmt. Es ist equivalent zu x = (TYPE_X)(x / n). Es inkludiert einen impliziten Cast auf den Ziel-Typ. Das ist ein Detail das man immer im Blick haben sollte. Also:

Java:
int x = 5;

x = x / 5.235; // Compiler-Fehler, "double" passt nicht in "int".
x /= 5.235; // Leise Konvertierung nach "int", entspricht also "x = (int)(x / 5.235)"

Wie finde ich die Antwort auf eine derartige Frage in Eclipse oder JShell?
Gar nicht, aber die offizielle Java Dokumentation ist sehr gut. ... Ich merke gerade die sind gar nicht in der Doku...moment...hier sind sie mit aufgefuehrt, aber ohne weiterfuehrende Erklaerung, habe ich die Doku zu frueh gelobt.
 
Zuletzt bearbeitet:

Blut1Bart

Bekanntes Mitglied

Neumi5694

Top Contributor
Zu dem Thema ist mir gerade ein Gedanke gekommen ... Weiß jemand zufällig, ob "x /=n" in irgend einer Weise optimiert wird, wenn's also um das Laden von Werten, Stackadressen und ähnlichem geht? Oder kommt im Byte-Code genau das gleiche raus?
 

Meniskusschaden

Top Contributor
Oder kommt im Byte-Code genau das gleiche raus?
Für dieses Beispiel:
Java:
package bytecode;

public class Bytecode {

    public static void main(String[] args) {
        m1(8, 2);
        m2(8, 2);
    }

    static int m1(int a, int b) {
        a = a / b;
        return a;
    }
    
    static int m2(int a, int b) {
        a /= b;
        return a;
    }
    
}
wird in meiner Complilerversion für m1() und m2() der gleiche Bytecode erzeugt:
Code:
// Compiled from Bytecode.java (version 16 : 60.0, super bit)
public class bytecode.Bytecode {
 
  // Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public Bytecode();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: bytecode.Bytecode
 
  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 2, Locals: 1
  public static void main(java.lang.String[] args);
     0  bipush 8
     2  iconst_2
     3  invokestatic bytecode.Bytecode.m1(int, int) : int [16]
     6  pop
     7  bipush 8
     9  iconst_2
    10  invokestatic bytecode.Bytecode.m2(int, int) : int [20]
    13  pop
    14  return
      Line numbers:
        [pc: 0, line: 6]
        [pc: 7, line: 7]
        [pc: 14, line: 8]
      Local variable table:
        [pc: 0, pc: 15] local: args index: 0 type: java.lang.String[]
 
  // Method descriptor #19 (II)I
  // Stack: 2, Locals: 2
  static int m1(int a, int b);
    0  iload_0 [a]
    1  iload_1 [b]
    2  idiv
    3  istore_0 [a]
    4  iload_0 [a]
    5  ireturn
      Line numbers:
        [pc: 0, line: 11]
        [pc: 4, line: 12]
      Local variable table:
        [pc: 0, pc: 6] local: a index: 0 type: int
        [pc: 0, pc: 6] local: b index: 1 type: int
 
  // Method descriptor #19 (II)I
  // Stack: 2, Locals: 2
  static int m2(int a, int b);
    0  iload_0 [a]
    1  iload_1 [b]
    2  idiv
    3  istore_0 [a]
    4  iload_0 [a]
    5  ireturn
      Line numbers:
        [pc: 0, line: 16]
        [pc: 4, line: 17]
      Local variable table:
        [pc: 0, pc: 6] local: a index: 0 type: int
        [pc: 0, pc: 6] local: b index: 1 type: int
}
 
M

Mart

Gast
static int m1(int a, int b) {
a = a / b;
return a;

a /= b;
return a;
da der einzige unterschied zwischen den Rechnungen der Cast ist wie oben schon beschrieben würd eder im byte code raus kommen normalerweise

ABER da die einzigen zwei werte für die berechnung sowieso den gleichen datentyp haben braucht man NIEMALS den cast, warum sollte ich von int nach int casten? => wird niemals passieren also wirds "wahrscheinlich" optimiert


der cast würde ja dann beim parameter aufruf schon passieren aber diese problematik ist ja beim methoden aufruf und nicht bei der rechnung
 

Blut1Bart

Bekanntes Mitglied
Pardon, wenn es irgendetwas Optimierungswürdiges gäbe, dann stünde es dort... Hier muss man genau sein.

Die Gleitzahldivision ist eindeutig spezifiziert und dass ein Cast in denselben Zieltyp entfallen kann, ist trivial. :)
 
M

Mart

Gast
Pardon, wenn es irgendetwas Optimierungswürdiges gäbe, dann stünde es dort... Hier muss man genau sein.

Die Gleitzahldivision ist eindeutig spezifiziert und dass ein Cast in denselben Zieltyp entfallen kann, ist trivial. :)
es steht da
int ergebnis = (int) (intzahl)/(intzahl)

der cast ist schlichtweg sinnlos => dewegen fällt er weg
 

Blut1Bart

Bekanntes Mitglied
Ich sprach von der JLS. Hier wurde erwähnt, dass der Operator gar nicht dokumentiert bzw. spezifiziert sei. Das stimmt so natürlich nicht. Tutorials sind auch etwas anderes als Dokumentationen.

Ich bin immer Fan davon, korrekte Begrifflichkeiten zu verwenden.
 

temi

Top Contributor
Optimierungen wären ja eher Sache des Compilers oder der Runtime, insofern müsste es sich um die Dokumentation eines der beiden handeln und nicht um die Sprachspezifikation. Sollte man meinen.
 

Blut1Bart

Bekanntes Mitglied
Na klar stehen keine Implementierungsdetails in der Spezifikation. Ich habe meine Aussage diesbezüglich ja auch schon konkretisiert: Optimierungsmöglichkeiten können aus der Spezifikation abgeleitet werden.
 

Meniskusschaden

Top Contributor
Optimierungsmöglichkeiten können aus der Spezifikation abgeleitet werden.
Du scheinst dich da ja auszukennen. Wie funktioniert das eigentlich in der Praxis? Man liest die JLS und entdeckt dort eine interessante Funktionalität F. Dann überlegt man sich, dass F ja z.B. mithilfe des inperformanten aber trivialen Algorithmus A_einfaeltig oder auch durch den ausgeklügelten schnellen Algorithmus A_ausgefuchst implementiert sein könnte. Daraus leitet man ab, dass bisher wahrscheinlich alle A_einfaeltig benutzt haben und sich deshalb die Investition in A_ausgefuchst bestimmt lohnen wird. Und so spart man sich die mühsamen Untersuchungen der Implementierungen, um Optimierungspotenzial zu finden, was ja angesichts deren Vielzahl ohnehin ein Wahnsinn wäre. Dass A_ausgefuchst bereits implementiert wurde kann man ja wegen ... na ja, aus irgendwelchen Gründen eben ... ausschließen. Läuft das so ab?
 
K

kneitzel

Gast
Der Kernpunkt ist doch einfach, dass die Optimierungen so nicht wirklich dokumentiert sind. Zumal es Optimierungen auf vielen Ebenen geben kann:
Java -> Bytecode - so lange die Regeln hier befolgt werden kann ein Compiler machen, was er will.
Bytecode -> Machine Code - so lange es dem JVMS entspricht darf hier eine Implementation frei walten.
'Utility' -> hier ist fast alles offen. Wie z.B. der GC vorgeht ist komplett der Implementation überlassen. Das geht dann bis hin zum 'ich 'abe gar kein Auto GC'
Oft kann man über ein Blick in die Referenzimplementation einige Einsichten gewinnen, aber wie eingeschränkt sich da Dinge ableiten lassen zeigen dann a) Veränderungen über die Zeit b) neue Implementationen (a.la. J9 von IBM/Eclipse Foundation)

Ein Verweis auf Dokumentation ist also extrem anzuzweifeln (Wobei es gute Blog Einträge gibt und so - aber da ist auch immer die Frage: auf was bezieht es sich und ist es noch aktuell bzw auf die Software anzuwenden, die ich gerade nutze?

Und am Ende noch (Last but Not least): es gibt ja auch Lösungen wie GraalVM wo die Struktur wieder etwas anders ist...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
A Shopping Cart Programm. Verstehe einige Zusammenhänge nicht Java Basics - Anfänger-Themen 1
K Erste Schritte Ich verstehe das Summenprogramm nicht Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
V Erste Schritte Array.length[x] in einer Schleife - ich verstehe das nicht Java Basics - Anfänger-Themen 1
Y Erste Schritte Ich verstehe this. nicht so richtig Java Basics - Anfänger-Themen 5
DaCrazyJavaExpert Methoden Verstehe Feheler nicht! Java Basics - Anfänger-Themen 7
Henri ich verstehe gerade nicht die Methode Java Basics - Anfänger-Themen 6
dave253 Ich verstehe folgenden Code nicht.. Java Basics - Anfänger-Themen 12
V Verstehe die Lösung einer Aufgabe von Grunkurs-Java nicht. Java Basics - Anfänger-Themen 11
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
P Verstehe Lösung einer Aufgabe von "Grundkurs-Java" nicht Java Basics - Anfänger-Themen 5
O Ich verstehe nicht, was Eclipse von mir will Java Basics - Anfänger-Themen 10
G Methoden Verstehe nicht was in der Methode gemacht wird? Java Basics - Anfänger-Themen 5
M Verstehe das Programm(Quellcode) nicht!! Java Basics - Anfänger-Themen 12
B Verstehe ZufallInt = (int) (Math.random() * 5 + 1); nicht Java Basics - Anfänger-Themen 9
F verstehe diese Variable nicht... Java Basics - Anfänger-Themen 4
A Codezeile die ich nicht verstehe Java Basics - Anfänger-Themen 7
Pentalon Ein Aufruf den ich nicht verstehe Java Basics - Anfänger-Themen 11
V Verstehe die Logik nicht ... Java Basics - Anfänger-Themen 30
C rekursive Methode verstehe nicht! Java Basics - Anfänger-Themen 3
B verstehe methode nicht methode Java Basics - Anfänger-Themen 2
B Erste Schritte Verstehe das nicht Java Basics - Anfänger-Themen 3
C verstehe get und set nicht Java Basics - Anfänger-Themen 3
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
T ich verstehe array nicht! Java Basics - Anfänger-Themen 11
P for Schleife mit break, verstehe die Ausgabe nicht Java Basics - Anfänger-Themen 6
A Verstehe readLine()-Funktion nicht Java Basics - Anfänger-Themen 3
A Verstehe das GUI nicht! Java Basics - Anfänger-Themen 7
D Verstehe Zusammenhang nicht- Und ihr? Java Basics - Anfänger-Themen 4
M THREADS - Ich verstehe es nicht Java Basics - Anfänger-Themen 10
T Verstehe Bufferreader prinzip nicht Java Basics - Anfänger-Themen 3
M Verstehe Aufgabe nicht, wie kann man schleifen einbauen? Java Basics - Anfänger-Themen 5
N Verstehe Step10 bei jME Eclipsetutorial nicht Java Basics - Anfänger-Themen 4
L Verstehe den Wert nicht! If-Anweisung Java Basics - Anfänger-Themen 5
N Verstehe diese Aufgabe nicht! Java Basics - Anfänger-Themen 16
Rudolf Verstehe das Ergebnis nicht - bitte erklären Java Basics - Anfänger-Themen 7
S Finde den Fehler nicht/ verstehe Anweisung nicht Java Basics - Anfänger-Themen 12
K Ich verstehe switch einfach nicht Java Basics - Anfänger-Themen 4
C Verstehe Code-Teil nicht. Java Basics - Anfänger-Themen 2
S Ich verstehe diese Methode nicht! Java Basics - Anfänger-Themen 6
G Verstehe das nicht. bitte um hilfe Java Basics - Anfänger-Themen 13
R Thread startet nicht, verstehe nicht warum Java Basics - Anfänger-Themen 2
R Verstehe die Ausgabe von folgendem Code nicht Java Basics - Anfänger-Themen 4
A verstehe aufgabenstellung nicht! Java Basics - Anfänger-Themen 47
S verstehe den fehler nicht Java Basics - Anfänger-Themen 14
C Verstehe die Syntax nicht! Java Basics - Anfänger-Themen 2
M Verstehe den Quellcode nicht ganz Java Basics - Anfänger-Themen 3
7 Verstehe Programm nicht Java Basics - Anfänger-Themen 6
G verstehe das problem nicht :( Java Basics - Anfänger-Themen 4
S RegEx Syntax - ich verstehe sie einfach nicht! Java Basics - Anfänger-Themen 3
G verstehe den unterschied zwischen equals und == nicht Java Basics - Anfänger-Themen 3
E Verstehe eine Schleife nicht Java Basics - Anfänger-Themen 5
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
G Verstehe einen Aufruf absolut nicht Java Basics - Anfänger-Themen 2
T Brauche Hilfe um ein Programm zu verstehe Java Basics - Anfänger-Themen 4
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
E I-JVM verstehe ich das richtig (bytecode aufgabe) Java Basics - Anfänger-Themen 2
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben