Inhaltsverzeichnis
1. Einführung
2. Verpackungsklasse
Heim Java javaLernprogramm So verwenden Sie Java Automatic Boxing, automatisches Unboxing und Integer-Caching

So verwenden Sie Java Automatic Boxing, automatisches Unboxing und Integer-Caching

Apr 24, 2023 pm 10:28 PM
java integer

1. Einführung

Was sind automatisches Einpacken und automatisches Auspacken? Was ist Integer-Cache? Wie ist die Beziehung zwischen ihnen?

Schauen wir uns zunächst eine Frage an.

Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a==b);
Integer c = 1;
Integer d = 1;
System.out.println(c==d);
Integer e = 128;
Integer f = 128;
System.out.println(e==f);
Nach dem Login kopieren
Nach dem Login kopieren

Antworte zuerst, schau dir die Antwort später an.

Die Antwort ist falsch wahr falsch, hast du recht?

Nachdem ein Teil erschienen ist, teilen wir die Wissenspunkte gemeinsam

2. Verpackungsklasse

Es gibt acht grundlegende Datentypen in Java, die in drei Kategorien unterteilt werden können:

  • Zeichentyp: char

  • Boolescher Typ: boolean

    #🎜 🎜#
  • Numerischer Typ: Byte Short Int Long Float Double

Die Verpackungsklasse dient zum Verpacken von acht Basisdaten Typen in Klassen umwandeln, um sie zu erstellen. Sie können die drei Hauptfunktionen von Java nutzen: Kapselung, Vererbung und Polymorphismus. Die entsprechende Beziehung ist wie folgt:

BasisdatentypEntsprechende Verpackungsklasse# 🎜🏜 🎜# Kurz#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#int#🎜🎜 ## 🎜🎜#Integer#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#Long#🎜🎜 ## 🎜 🎜# Long#### 🎜🎜 ## 🎜🎜 ## 🎜🎜#Floatl#Float#🎜🎜 ## 🎜🎜 ## 🎜🎜#Double#🎜🎜 ## 🎜 🎜 # Double # # 🎜🎜#CharacterDie sechs Verpackungsklassen, die numerischen Typen entsprechen, erben alle von der Number-Klasse. 3. Automatisches Einpacken und automatisches Auspacken Acht grundlegende Datentypen entsprechen acht Verpackungsklassen. Wie führen sie die Datenkonvertierung durch? Um ein Objekt zu erhalten, können Sie eine bestimmte Methode verwenden. Um einen Wert zu erhalten, rufen Sie ein bestimmtes Attribut des Objekts auf. Java 5.0 muss nicht mehr so ​​mühsam sein. Neue Funktionen des automatischen Boxens und des automatischen Unboxings wurden hinzugefügt. Tatsächlich sind die beiden Konzepte sehr einfach zu verstehen.
int a = 10;
Integer b = a;  //自动装箱
int c = b;  //自动拆箱
Nach dem Login kopieren
Auf den ersten Blick entspricht die Form von Objekt = Zahlenwert nicht der Erkenntnis, kann aber mit Hilfe des automatischen Boxens und automatischen Unboxings realisiert werden. Tatsächlich implementiert der Compiler es immer noch mit Hilfe von valueOf() und xxxValue(). Werfen wir einen Blick auf den Quellcode von valueOf(). valueOf() gibt nicht einfach ein Integer-Objekt zurück, sondern beurteilt zunächst, ob die Eingabedaten einem bestimmten Bereich entsprechen. Aus den Kommentaren wird dieser Bereich standardmäßig zurückgegeben [-128,127] und kann ein größerer Bereich sein; wenn er diesen Bereich überschreitet, wird ein neues Objekt zurückgegeben. Die verwendeten IntegerCache-Daten sind der Cache von Integer. 4. Numerische Berechnungen werden im täglichen Leben häufig verwendet, wenn Sie Java ausführen Programm Ein statisches Array wird automatisch als Cache generiert. Der Standard-Cache-Array-Bereich für Integer ist [-128.127]. Solange die Daten innerhalb dieses Bereichs liegen, kann das entsprechende Objekt aus dem Cache abgerufen werden. Schauen Sie sich den IntegerCache-Quellcode an. Wie Sie sehen können, ist IntegerCache eine statische interne Klasse von IntegerCache.cache, die von valueOf() aufgerufen wird, ist ein Array-Objekt im Bereich ist der Standardwert [-128, 127], natürlich (laut Kommentar) kann dieser Bereich auch über die JVM geändert werden (das verstehe ich nicht). Dann wird jedem Element im Array ein Integer-Objekt zugewiesen und der Cache wird gebildet. Es gibt einen Array-Cache, was bedeutet, dass, wenn der Wert in [-128,127] liegt, das mit valueOf() oder automatischem Boxen erstellte Integer-Objekt aus dem Array entfernt wird, sodass auf den Speicher verwiesen wird durch das Objekt Die Adresse ist genau gleich. Wenn Sie new verwenden oder diesen Bereich überschreiten, muss das Objekt neu erstellt werden. Natürlich verfügt nicht nur Integer über einen Caching-Mechanismus, sondern auch Byte, Short, Long und Character verfügen alle über Caching-Mechanismen. Der Bereich von Byte, Short, Integer und Long liegt zwischen -128 und 127 und der Bereich von Character zwischen 0 und 127. 5. Beantworten Sie die Frage
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a==b);
Integer c = 1;
Integer d = 1;
System.out.println(c==d);
Integer e = 128;
Integer f = 128;
System.out.println(e==f);
Nach dem Login kopieren
Nach dem Login kopieren
1 Auch wenn die beiden von new erstellten Objekte auf unterschiedliche Speicheradressen verweisen, verwenden Sie == zum Vergleichen Rückgabe des Ergebnisses: false2. Automatischer Box- und Caching-Mechanismus, die beiden Objekte sind tatsächlich gleich, das Rückgabeergebnis ist true

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Java Automatic Boxing, automatisches Unboxing und Integer-Caching. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles
//基本数据类型转包装类
//1.有参构造
Integer a = new Integer(1);
//2.实际上,有参构造的参数也可以是字符串,不过要使用正确的数据,“123abc”不可能会转换为Integer类型
Integer b = new Integer("123");
//3.valueOf()
Integer c = Integer.valueOf(123);
//包装类转基本数据类型(xxxValue()  float是floatValue() double是doubleValue())
int d = a.intValue();
Nach dem Login kopieren
/**
     * Returns an {@code Integer} instance representing the specified
     * {@code int} value.  If a new {@code Integer} instance is not
     * required, this method should generally be used in preference to
     * the constructor {@link #Integer(int)}, as this method is likely
     * to yield significantly better space and time performance by
     * caching frequently requested values.
     *
     * This method will always cache values in the range -128 to 127,
     * inclusive, and may cache other values outside of this range.
     *
     * @param  i an {@code int} value.
     * @return an {@code Integer} instance representing {@code i}.
     * @since  1.5
     */
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
Nach dem Login kopieren
/**
     * Cache to support the object identity semantics of autoboxing for values between
     * -128 and 127 (inclusive) as required by JLS.
     *
     * The cache is initialized on first usage.  The size of the cache
     * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
     * During VM initialization, java.lang.Integer.IntegerCache.high property
     * may be set and saved in the private system properties in the
     * sun.misc.VM class.
     */
private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];
    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;
        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);
        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
    }
    private IntegerCache() {}
}
Nach dem Login kopieren
#3 Außerhalb des Cache-Bereichs, neu wird während der Ausführung generiert Objekt, die beiden Objekte sind unterschiedlich, das Rückgabeergebnis ist falsch