1. Java basic data types and their encapsulation classes
java Data types include basic data types and reference data types. In order to facilitate the processing of basic data types as objects, Java introduces encapsulation classes corresponding to basic data types. For example, the int encapsulation class is Integer.
Online teaching video sharing:java teaching video
2. java automatic unboxing and automatic packing
1. Automatic boxing
Autoboxing is actually converting basic data types into reference data types (objects)
2. Automatic unboxing
Automatic unboxing is actually converting reference data types into basic data types
The code is as follows:
public static void main(String[] args) { Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1); int b = a - 1;//对象不能直接进行计算,所以这里有自动拆箱的操作,将a对象转换成基本数据类型,然后-1 System.out.println(a); System.out.println(b); }
Print results:
1 0
3. The difference between int and Interger
From the above we can see the difference between int and Interger:
int is the basic data type, and Integer is the reference data type;
## The default value of #int is 0, and the default value of Integer is null; int type directly stores values, and Integer needs to instantiate the object and point to the address of the object. Speaking of this, do you think that’s it? In fact, there are some detailed differences between them: as followspublic static void main(String[] args) { Integer a = new Integer(1); Integer b = new Integer(1); int c = 1; int d = 1; Integer e = 1; Integer f = 1; Integer g = 130; Integer h = 130; Integer i = new Integer(130); int j = 130; }1: a == b? Nonsense, definitely not equal. The addresses of the two new objects are different. 2: c == d? This is also nonsense, the values of basic data types must be equal. 3: The key question now is e == f? g == h? The answer is: e == f; g != h. Why does this happen? Because Integer g = 130 will be compiled into Integer.valueOf(130) when ava is compiled. This can be seen by decompiling the class file. It can be concluded from the Integer source code that the Integer.valueOf() method will cache the Integer between the values -128~127, and will not create a new one, so e==f; when the value two is greater than 127 or less than - At 128, a new one will be created, so g != h.
The valueOf method of Integer is as follows:
public static Integer valueOf(int i) { //IntegerCache.low == -128 ;IntegerCache.high == 127 //当数值大于-128小于127时,进行缓存;否则重新new一个。 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }4: Does c == e, i == j? The answers are all equal. Because when comparing encapsulated classes with basic data types, Java will automatically unbox them and then compare whether the values are equal. Summary: 1. They are all encapsulated classes and are all derived from new, so they are definitely not equal. Because the memory addresses of the objects are different. 2. They are all encapsulated classes and are not derived from new. If the value is between -128~127, it is equal, otherwise it is not equal. 3. If the encapsulated class and the basic type are compared, as long as the values are equal, they are equal, otherwise they are not equal. Because there will be an automatic unboxing operation when comparing the encapsulated class with the basic data type. 4. They are all basic data types. If the values are equal, they are equal; otherwise, they are not equal. For more related tutorials, please visit:
The above is the detailed content of The difference between int and integer in java. For more information, please follow other related articles on the PHP Chinese website!