Read "Streaming Systems" 1&2, Streaming 101 Read "F1, a distributed SQL database that scales" Read "Zanzibar, Google’s Consistent, Global Authorization System" Read "Spanner, Google's Globally-Distributed Database" Read "Designing Data-intensive applications" 12, The Future of Data Systems IOS development with Swift Read "Designing Data-intensive applications" 10&11, Batch and Stream Processing Read "Designing Data-intensive applications" 9, Consistency and Consensus Read "Designing Data-intensive applications" 8, Distributed System Troubles Read "Designing Data-intensive applications" 7, Transactions Read "Designing Data-intensive applications" 6, Partitioning Read "Designing Data-intensive applications" 5, Replication Read "Designing Data-intensive applications" 3&4, Storage, Retrieval, Encoding Read "Designing Data-intensive applications" 1&2, Foundation of Data Systems Three cases of binary search TAMU Operating System 2 Memory Management TAMU Operating System 1 Introduction Overview in cloud computing 2 TAMU Operating System 7 Virtualization TAMU Operating System 6 File System TAMU Operating System 5 I/O and Disk Management TAMU Operating System 4 Synchronization TAMU Operating System 3 Concurrency and Threading TAMU Computer Networks 5 Data Link Layer TAMU Computer Networks 4 Network Layer TAMU Computer Networks 3 Transport Layer TAMU Computer Networks 2 Application Layer TAMU Computer Networks 1 Introduction Overview in distributed systems and cloud computing 1 A well-optimized Union-Find implementation, in Java A heap implementation supporting deletion TAMU Advanced Algorithms 3, Maximum Bandwidth Path (Dijkstra, MST, Linear) TAMU Advanced Algorithms 2, B+ tree and Segment Intersection TAMU Advanced Algorithms 1, BST, 2-3 Tree and Heap TAMU AI, Searching problems Factorization Machine and Field-aware Factorization Machine for CTR prediction TAMU Neural Network 10 Information-Theoretic Models TAMU Neural Network 9 Principal Component Analysis TAMU Neural Network 8 Neurodynamics TAMU Neural Network 7 Self-Organizing Maps TAMU Neural Network 6 Deep Learning Overview TAMU Neural Network 5 Radial-Basis Function Networks TAMU Neural Network 4 Multi-Layer Perceptrons TAMU Neural Network 3 Single-Layer Perceptrons Princeton Algorithms P1W6 Hash Tables & Symbol Table Applications Stanford ML 11 Application Example Photo OCR Stanford ML 10 Large Scale Machine Learning Stanford ML 9 Anomaly Detection and Recommender Systems Stanford ML 8 Clustering & Principal Component Analysis Princeton Algorithms P1W5 Balanced Search Trees TAMU Neural Network 2 Learning Processes TAMU Neural Network 1 Introduction Stanford ML 7 Support Vector Machine Stanford ML 6 Evaluate Algorithms Princeton Algorithms P1W4 Priority Queues and Symbol Tables Stanford ML 5 Neural Networks Learning Princeton Algorithms P1W3 Mergesort and Quicksort Stanford ML 4 Neural Networks Basics Princeton Algorithms P1W2 Stack and Queue, Basic Sorts Stanford ML 3 Classification Problems Stanford ML 2 Multivariate Regression and Normal Equation Princeton Algorithms P1W1 Union and Find Stanford ML 1 Introduction and Parameter Learning

Java boxing and unboxing

2017-10-13

The code listed below shows a classic result related to boxing and unboxing in Java.

    public static void main(String[] args) {
        Integer i1 = 127;
        Integer i2 = 128;
        Integer i3 = 127;
        Integer i4 = 128;
        Integer i5 = new Integer(127);
        Integer i6 = new Integer(127);
        System.out.println(i1 == i3);   // true
        System.out.println(i2 == i4);   // false
        System.out.println(i5 == i6);   // false
        System.out.println("0000000000" == "0000000000");   // true
    }
  1. Boxing is the conversion from primitive type to wrapper class, like from int to Integer.
  2. Unboxing is from wrapper class to primitive type.

== compares the references of two objects. equals() method compares the values of two objects. JVM will auto-box some primitives into the same wrapper class object. These objects will be saved in buffer in order to be used repeatly.

These primitives include:

  1. boolean
  2. byte
  3. short and int between -128 and 127
  4. char between 0 and 0x7f

In conclusion, for two objects with the same value,

  1. If one of them are primitive, == is always true. (unboxing wrapper)
  2. If both are wrapper class object
    • If one of them is created by new, == is false. (allocates new space)
    • Else if Boolean, Byte, Float and Double, == is true.
    • Else if Short, Integer and Long, and the value is between -128 and 127, == is true
    • Else if Character with value between 0 and 0x7f, == is true
    • Else, == is false

It is worthy to note here if we want to compare values, we should always use equals() method. I have made such mistake before..

Boxing and unboxing are automatically done in JVM. For example,

int i = 10;
Integer a = i;  // boxing
int k = a;  // unboxing

But we can still do it manually like

int i = 10;
Integer a = new Integer(i); // boxing
int j = a.intValue(); // unboxing

Let’s look at an example here.

Integer d = new Integer(10);
d++;    // unboxing d first, then ++, finally boxing result

In method overload case, if we have following two methods in a class

public void test(double num);
public void test(Integer num);

For a int k, if we do test(k), Java will call test(double num) instead of the other one. Because in Java 4, we don’t have boxing and unboxing feature. The result is due to backwards compatibility.


Creative Commons License
Melon blog is created by melonskin. This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
© 2016-2019. All rights reserved by melonskin. Powered by Jekyll.