Thomas Darimont
Erfahrenes Mitglied
Hallo!
Wie ihr ja, sicherlich schon wisst gibt's ja seit Java 5.0 einige neue Methoden in den
Wrapperklassen (Integer, Long,...) für die primitiven Typen wie (int, long,...).
in Form eines kleinen Caches für Werte -127 > x < 128:
Nun gibt's damit jedoch Probleme mit einem neuen Feature von Java 5.0 namens
Autounboxing.
Folgendes Programm:
ergibt dekompiliert:
Als Ausgabe erhält man:
true
false
Jetzt ist die Frage, was sich sun bei einem solchen Verhalten gedacht hat,
Performance Optimierungen?
Lange rede kurzer Sinn ...Man sollte also "vorsichtigst" mit den neuen Features umgehen ... ;-)
Gruß Tom
Wie ihr ja, sicherlich schon wisst gibt's ja seit Java 5.0 einige neue Methoden in den
Wrapperklassen (Integer, Long,...) für die primitiven Typen wie (int, long,...).
in Form eines kleinen Caches für Werte -127 > x < 128:
Code:
...
static final Integer cache[] = new Integer[-(-128) + 127 + 1];static { for(int i = 0; i < cache.length; i++) cache[i] = new Integer(i - 128);}
...
Nun gibt's damit jedoch Probleme mit einem neuen Feature von Java 5.0 namens
Autounboxing.
Folgendes Programm:
Code:
/*
* Created on 21.01.2005@18:36:53
*
* TODO Licence info
*/
package de.tutorials;
/**
* @author Darimont
*
* TODO Explain me
*/
public class Main {
public static void main(String[] args) {
Integer i1 = 32;
Integer j1 = 32;
Integer i2 = 320;
Integer j2 = 320;
System.out.println(i1 == j1);
System.out.println(i2 == j2);
}
}
ergibt dekompiliert:
Code:
// Decompiled by DJ v3.6.6.79 Copyright 2004 Atanas Neshkov Date: 21.01.2005 18:34:14
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: Main.java
package de.tutorials;
import java.io.PrintStream;
public class Main
{
public Main()
{
}
public static void main(String args[])
{
Integer i1 = Integer.valueOf(32);
Integer j1 = Integer.valueOf(32);
Integer i2 = Integer.valueOf(320);
Integer j2 = Integer.valueOf(320);
System.out.println(i1 == j1);
System.out.println(i2 == j2);
}
}
Als Ausgabe erhält man:
true
false
Jetzt ist die Frage, was sich sun bei einem solchen Verhalten gedacht hat,
Performance Optimierungen?
Lange rede kurzer Sinn ...Man sollte also "vorsichtigst" mit den neuen Features umgehen ... ;-)
Gruß Tom