70 lines
1.6 KiB
Plaintext
70 lines
1.6 KiB
Plaintext
Boxing is the process of putting a primitive value into an analogous object, such as creating an ``++Integer++`` to hold an ``++int++`` value. Unboxing is the process of retrieving the primitive value from such an object.
|
|
|
|
|
|
Since the original value is unchanged during boxing and unboxing, there's no point in doing either when not needed. This also applies to autoboxing and auto-unboxing (when Java implicitly handles the primitive/object transition for you).
|
|
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
public void examineInt(int a) {
|
|
//...
|
|
}
|
|
|
|
public void examineInteger(Integer a) {
|
|
// ...
|
|
}
|
|
|
|
public void func() {
|
|
int i = 0;
|
|
Integer iger1 = Integer.valueOf(0);
|
|
double d = 1.0;
|
|
|
|
int dIntValue = new Double(d).intValue(); // Noncompliant
|
|
|
|
examineInt(new Integer(i).intValue()); // Noncompliant; explicit box/unbox
|
|
examineInt(Integer.valueOf(i)); // Noncompliant; boxed int will be auto-unboxed
|
|
|
|
examineInteger(i); // Compliant; value is boxed but not then unboxed
|
|
examineInteger(iger1.intValue()); // Noncompliant; unboxed int will be autoboxed
|
|
|
|
Integer iger2 = new Integer(iger1); // Noncompliant; unnecessary unboxing, value can be reused
|
|
}
|
|
----
|
|
|
|
|
|
== Compliant Solution
|
|
|
|
----
|
|
public void examineInt(int a) {
|
|
//...
|
|
}
|
|
|
|
public void examineInteger(Integer a) {
|
|
// ...
|
|
}
|
|
|
|
public void func() {
|
|
int i = 0;
|
|
Integer iger1 = Integer.valueOf(0);
|
|
double d = 1.0;
|
|
|
|
int dIntValue = (int) d;
|
|
|
|
examineInt(i);
|
|
|
|
examineInteger(i);
|
|
examineInteger(iger1);
|
|
}
|
|
----
|
|
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|