fw hat geschrieben:"Integer x = new Integer(42)", x ist nun ein Objekt und wird per Reference übergeben (wogegen 42 (oder eine Variable vom Typ int) per Value übergeben worden wäre)
thana hat geschrieben:fw hat geschrieben:"Integer x = new Integer(42)", x ist nun ein Objekt und wird per Reference übergeben (wogegen 42 (oder eine Variable vom Typ int) per Value übergeben worden wäre)
Neinneinnein, in Java wird *NIE* irgendwas by-reference übergeben. Es wir *IMMER* *ALLES* by-value übergeben.
Im Falle von Objekten wird aber natürlich nur die Referenz auf das Objekt übergeben, das aber auch by-value!
Integer i = 24;
Integer j = 27;
if (i <= j) {
System.out.println("i <= j");
}
Lukul hat geschrieben:Zumindest in Java 1.6 funktioniert sowas hier problemlos:
- Code: Alles auswählen
Integer i = 24;
Integer j = 27;
if (i <= j) {
System.out.println("i <= j");
}
thana hat geschrieben:Neinneinnein, in Java wird *NIE* irgendwas by-reference übergeben. Es wir *IMMER* *ALLES* by-value übergeben.
Im Falle von Objekten wird aber natürlich nur die Referenz auf das Objekt übergeben, das aber auch by-value!
public class Test {
static Integer i;
static void test(Integer i) {
i++; // oder i = 1337; oder i = new Integer("0815"); etc..
}
public static void main(String[] args) {
Test.i = 42;
test(Test.i);
System.out.println(Test.i);
}
}theTux hat geschrieben:Lukul hat geschrieben:Zumindest in Java 1.6 funktioniert sowas hier problemlos:
- Code: Alles auswählen
Integer i = 24;
Integer j = 27;
if (i <= j) {
System.out.println("i <= j");
}
Das hat so keine Aussagekraft. Denn wenn der <=-Operator nicht überladen ist, werden die Speicheradressen verglichen. Und da du i vor j deklariert hast, wird i mit einiger Sicherheit auch vor j im Speicher stehen.
public class Test {
public static void main (String[] args) {
Thread j = new Thread();
Thread k = new Thread();
if (j <= k) System.out.println("");
}
}
ln@igemyvuci:~$ javac Test.java
Test.java:6: operator <= cannot be applied to java.lang.Thread,java.lang.Thread
if (j <= k) System.out.println("");
^
1 error
Lukul hat geschrieben:Ich wüsste nicht, dass man in Java Speicheradressen vergleichen könnte.
(Integer) 15 == (Integer) 15
(Integer) 150 == (Integer) 150
mgla hat geschrieben:Es ist so das Java gewisste Integer (mit großem I) cached. ich meine das waren die von -128 bis +128. Vermutlich weil die am häufigstem verwendet werden.
Deshalb ist:
- Code: Alles auswählen
(Integer) 15 == (Integer) 15
true, aber:
- Code: Alles auswählen
(Integer) 150 == (Integer) 150
false.
"foo" == "foo" new String ("foo") == new String ("foo")theTux hat geschrieben:Ich meine, es ging mal mit Java.
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
thana hat geschrieben:Die genaueren Umstände werde ich mal in Erfahrung bringen. MICH interessierts jedenfalls