In versions of Java prior to J2SE 5.0, if you wanted to insert a primitive value into a data structure that could store only Objects, you had to create a new object of the corresponding type-wrapper class, then insert this object in the collection. Similarly, if you wanted to retrieve an object of a type-wrapper class from a collection and manipulate its primitive value, you had to invoke a method on the object to obtain its corresponding primitive-type value. For example, suppose you want to add an int to an array that stores only references to Integer objects. Prior to J2SE 5.0, you would be required to "wrap" an int value in an Integer object before adding the integer to the array and to "unwrap" the int value from the Integer object to retrieve the value from the array, as in
Integer[] integerArray = new Integer[ 5 ]; // create integerArray // assign Integer 10 to integerArray[ 0 ] integerArray[ 0 ] = new Integer( 10 ); // get int value of Integer int value = integerArray[ 0 ].intValue();
Notice that the int primitive value 10 is used to initialize an Integer object. This achieves the desired result but requires extra code and is cumbersome. We then need to invoke method intValue of class Integer to obtain the int value in the Integer object.
J2SE 5.0 simplifies converting between primitive-type values and type-wrapper objects, requiring no additional code on the part of the programmer. J2SE 5.0 introduces two new conversionsthe boxing conversion and the unboxing conversion. A boxing conversion converts a value of a primitive type to an object of the corresponding type-wrapper class. An unboxing conversion converts an object of a type-wrapper class to a value of the corresponding primitive type. J2SE 5.0 allows these conversions to be performed automatically (called autoboxing and auto-unboxing). For example, the previous statements can be rewritten as
Integer[] integerArray = new Integer[ 5 ]; // create integerArray integerArray[ 0 ] = 10; // assign Integer 10 to integerArray[ 0 ] int value = integerArray[ 0 ]; // get int value of Integer
In this case, autoboxing occurs when assigning an int value (10) to integerArray[ 0 ], because integerArray stores references to Integer objects, not int primitive values. Auto-unboxing occurs when assigning integerArray[ 0 ] to int variable value, because variable value stores an int value, not a reference to an Integer object. Autoboxing and auto-unboxing also occur in control statementsthe condition of a control statement can evaluate to a primitive boolean type or a Boolean reference type. Many of this chapter's examples use these conversions to store primitive values in and retrieve them from data structures that store only references to Objects.
Introduction to Computers, the Internet and the World Wide Web
Introduction to Java Applications
Introduction to Classes and Objects
Control Statements: Part I
Control Statements: Part 2
Methods: A Deeper Look
Arrays
Classes and Objects: A Deeper Look
Object-Oriented Programming: Inheritance
Object-Oriented Programming: Polymorphism
GUI Components: Part 1
Graphics and Java 2D™
Exception Handling
Files and Streams
Recursion
Searching and Sorting
Data Structures
Generics
Collections
Introduction to Java Applets
Multimedia: Applets and Applications
GUI Components: Part 2
Multithreading
Networking
Accessing Databases with JDBC
Servlets
JavaServer Pages (JSP)
Formatted Output
Strings, Characters and Regular Expressions
Appendix A. Operator Precedence Chart
Appendix B. ASCII Character Set
Appendix C. Keywords and Reserved Words
Appendix D. Primitive Types
Appendix E. (On CD) Number Systems
Appendix F. (On CD) Unicode®
Appendix G. Using the Java API Documentation
Appendix H. (On CD) Creating Documentation with javadoc
Appendix I. (On CD) Bit Manipulation
Appendix J. (On CD) ATM Case Study Code
Appendix K. (On CD) Labeled break and continue Statements
Appendix L. (On CD) UML 2: Additional Diagram Types
Appendix M. (On CD) Design Patterns
Appendix N. Using the Debugger
Inside Back Cover