API文档 => java.lang => Integer 等
包装类与基本数据类型
我们知道,Java的数据类型包括两大类,基本数据类型和引用数据类型。
其中,基本数据类型是不具有对象特征的,即他们不能像对象一样拥有属性和方法,也无法进行对象化交互。
而包装类的产生,就是为了解决基本数据类型存在的这些问题。
包装类常用方法
Byte,Short,Integer,Long类 继承自 Number类
Character,Boolean类 继承自Object类
基本数据类型和包装类之间的转换
装箱:基本数据类型 => 包装类
拆箱:包装类 => 基本数据类型
package com.song.test;
public class TryDemoOne {
public static void main(String[] args) {
// 1,自动装箱
int t1 = 2;
Integer t2 = t1;
// 2,手动装箱
Integer t3 = new Integer(t1);
// 测试
System.out.println("装箱");
System.out.println("t1:" + t1);
System.out.println("装箱后t2:" + t2);
System.out.println("装箱后t3:" + t3);
// 1,自动拆箱
int t4 = t2;
// 2,手动拆箱
int t5 = t2.intValue();
// 测试
System.out.println("拆箱");
System.out.println("t2:" + t2);
System.out.println("拆箱后t4:" + t4);
System.out.println("拆箱后t5:" + t5);
}
}
装箱
t1:2
装箱后t2:2
装箱后t3:2
拆箱
t2:2
拆箱后t4:2
拆箱后t5:2
补充1:
使用System.out.print()输出对象名的时候,会调用该对象的toString方法。
而Integer类的toString方法,返回的是里面的数据值
补充2:
intValue()用于把包装类转换为int类型的值,同理还有floatValue()等等
基本数据类型和字符串之间的转换
package com.song.test;
public class TryDemoOne {
public static void main(String[] args) {
// 基本数据类型转换为字符串
int t1 = 2;
String t2 = Integer.toString(t1);
// 测试
System.out.println("int类型转换为String类型对象t2=" + t2);
System.out.println("===============================");
// 字符串转换为基本数据类型
// 1,包装类的parse
int t3 = Integer.parseInt(t2);
// 2,包装类的valueOf 先将字符串转换为包装类,在通过自动拆箱完成基本类型转换
int t4 = Integer.valueOf(t2);
// 测试
System.out.println("String类型转换为int类型变量t3=" + t3);
System.out.println("String类型转换为int类型变量t4=" + t4);
}
}
int类型转换为String类型对象t2=2
===============================
String类型转换为int类型变量t3=2
String类型转换为int类型变量t4=2
包装类对象的初始值
和基本类型的初始值不同,包装类对象的初始值为null
TryDemoOne.java
package com.song.test;
public class TryDemoOne {
public static void main(String[] args) {
Cat one = new Cat();
System.out.println("昵称:" + one.name);
System.out.println("年龄:" + one.month);
System.out.println("体重:" + one.weight);
}
}
1,测试基本数据类型的初始值
Cat.java
package com.song.test;
public class Cat {
String name;
int month;
double weight;
}
昵称:null
年龄:0
体重:0.0
2,测试包装类对象的初始值
package com.song.test;
public class Cat {
String name;
Integer month;
Double weight;
}
昵称:null
年龄:null
体重:null
包装类对象间的比较
package com.song.test;
public class TryDemoOne {
public static void main(String[] args) {
Integer one = new Integer(100);
Integer two = new Integer(100);
System.out.println("one == two的结果:" + (one == two)); // false
// == 两边放的如果是对象名,比较的是对象在内存中的引用(地址),而不仅仅是里面的值
// 这里的one和two各自指向不同的内存空间,只不过其内存空间中的值都是100,所以结果是false
Integer three = 100;
System.out.println("three == 100的结果:" + (three == 100)); // true
// 12行是一个自动装箱的操作
// 13行执行“three == 100”的时候会自动拆箱,比较的就是100 == 100,所以结果是true
Integer four = 100;
System.out.println("three == four的结果:" + (three == four)); // true
// Java背景知识说明之对象缓存区 **仅限于Integer类型对象**
// Java中有一个缓存区(对象池),当-128<=参数<=127的时候:
// 如果缓存区(对象池)中存在该对象,会直接拿过来使用,否则会创建该对象
// Integer three = 100 具体来说就是 Integer three = Integer.valueOf(100)
// 也就是说会自动产生一个包装类的对象
// Integer four = 100的时候,缓存区里已经存在该对象(Integer three = 100的时候创建的)
// 所以不会再创建值为100的包装类对象,而是直接拿过来用,所以结果是true
Integer five = 200;
System.out.println("five == 200的结果:" + (five == 200)); // true
// 28行自动装箱
// 29行执行“five == 100”的时候会自动拆箱,比较的就是100 == 100,所以结果是true
Integer six = 200;
System.out.println("five == six的结果:" + (five == six)); // false
// 缓存区的要求是-128<=参数<=127,这里不满足,所以是两个不同的对象,结果为false
}
}
补充:
equals(Object IntegerObj)比较的是两对象中包含的基本数据类型的值是否相等,而不是两地址是否相等。