Java : 详解八种基本数据类型的包装类
每博一文案
人生路漫漫越长大,越明白每个人的路都是漫长而艰辛的。无论我们有多累,我们都无路可退。
就像马丁说的那样:每一个强大的人都曾咬着牙度过一段,没人帮忙,没人支持,没人嘘寒问暖的日子。
过去了,这就是你的成人礼,过不去,求饶了,这就是你的无底洞,我们都要熬过一段灰暗,孤独,无人能懂得岁月,别无他法,谁也无法
逃避,蔡康曾说,人生前期越是嫌麻烦,越是懒的学习,后来就越可能错过让你心动的人和事。
错过风景,生活有太多的磨难和挫折,跌宕起伏,但那些打不倒我们的,将会让我们变得更加强大,尝遍人间百味的我们将会更加生动而干劲。
虽然很累,但当我们沉住气,会发现所有的经历都是成长的印记,经历过大浪淘沙的洗礼后,
人生会多一份坚强与淡然,世间从没有净土,但我们可以为自己造一方乐园。
有时候生活不会立即给我们答案,我们要拿出耐心等待,即便空谷喊话,也要等一会儿才能听见绵长的回音。
有人说,那些让你遍体鳞伤的地方,终会长成你最坚强之处,无论这是一路雨雪,泥泞,还是鲜花掌声,都是独一无二的,都构成了
精彩的人生。
愿你在最孤独的时候,也能一个人勇敢的赶路,带着微笑,接住生活中的每一个挑战。
—————— 一禅心灵庙语
文章目录
1. 八种基本数据类型的包装类
Java 提供了 8 种基本数据类型对应的包装类,使得基本数据类型变量具有类的特征。
因为有的方法的参数是:类对象,所以对应的基本数据类型也就无法传递了。
同时基本数据类型不是类,无法继承Object的父类,更无法调用其中的方法。
Java是面向对象编程了,而基本数据类型却没有类,就失去了面对对象的特性。
有了类的特点,就可以调用类中的方法,Java才是真正的面向对象
如下是八大基本数据类型所对应的包装类
这八大基本数据类型的包装类的父类是 Number
,都继承于它,对于这八大包装类,大家只需要记住两个特殊的 : int –> Integer,char –> Character 其余的都是原先基本数据类型上的首字母 大写
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int |
Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char |
Character |
1.2 为什么要引入 “包装类”
假设有这样的一个方法:它的形式参数是 Object
类型的,它只能接受所有 引用 数据类型,因为 Object
类是所有类的父类,不能接受基本数据类型。这个时候,我非要传一个 int 类型的数据进去,该怎么办???
假设有这样一个方法:它的形式参数是Object型
它能接收所有引用数据类型,因为Object类是所有类的父类,不能接受基本数据类型。
如果我想传一个int型数字进去,该怎么解决?
这时候我们就需要使用一个自己定义一个包装类,用于存储你要传递的 int 类型的数据信息。
自己为一个数据类型封装一个类。
具体代码如下:
package blogs.blog1;
public class simulateInt {
public static void main(String[] args) {
int num = 100;
// 将定义好的 int 100 封装传入到自定义的包装类当中去
MyInt myInt = new MyInt(num);
// 传入定义好的 int 类型的包装类
disPlay(myInt);
}
// 该方法的形参只接受引用类型
public static void disPlay(Object object) {
System.out.println(object.toString());
}
}
// 自己定义的包装类,用于存储 int 基本数据类型的
class MyInt {
private int num;
public MyInt() {
}
public MyInt(int num) {
this.num = num;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "int类型的包装类: " +
"num=" + num +
'}';
}
}
为了解决这个需求问题,java为八大数据类型提供了包装类,就不需要自己定义,创建了。
1.3 为什么需要两种类型
在Java语言中,一些都是以类和对象来设计的,所有的数据类型都是引用类型(指向内存当中某个对象的地址)创建一个对象后会存储在 堆 里,然后通过栈的引用来使用对象 (堆中存放具体内容,栈中存放对象的地址)。但是对于一些经常用到的一系列 如:int ,float,double ,如果每次都创建出来,存放堆里就会变的不是很有效率,所以就出现了基本类型,直接将变量存储在栈中,不用创建 new 关键字来创建,可以变得更加高效。
而基本数据类型不具有对象的性质,为了让基本数据类型也具有对象的特征,就出现了 包装类 ,如果某个方法需要Object 类型的参数,而实际需要的值是 2,3等数值时,包装类就派上用场了,再比如使用 Collection 集合类型时,就一定要使用包装类,而不是基本数据类型。以及上述我所举例的。
**我们需要掌握 基本数据类型 ——> 包装类,包装类——> 基本数据类型,String ——> 基本数据类型,包装类,基本数据类型 ——> String **
2. 基本数据类型 ——> 包装类
使用 new
创建类的方式,创建包装类,将需要转换为 包装类的数值,传入对应包装类的构造方法调用赋值,可以是对应的数值,也可以是对应数值的字符串。
public class simulateInt {
// 基本数据类型 --> 包装类
public static void main(String[] args) {
int num1 = 100;
Integer i1 = new Integer(num1); // 将 int 转换为 Integer 包装类
Integer i2 = new Integer("999"); // 字符串也是可以的
System.out.println(i1);
System.out.println(i2);
float f1 = 23.8f; // 因为小数默认是 double 类型的
Float f2 = new Float(f1); // 将 float 转换为 Float 的包装类
Float f3 = new Float("3.14"); // 字符串也是可以的。
System.out.println(f2);
System.out.println(f3);
}
}
特殊的如果对于 int, long, float ,double 类型的包装类,new 时传入的形参是 带有字母/特殊字符(‘123abc’)的是会报错: NumberFormatException
异常(在Java中对字符串和数字直接进行类型转换的报错)
如下:
public class simulateInt {
// 基本数据类型 --> 包装类
public static void main(String[] args) {
Integer integer = new Integer("123abc"); // 报错 字符无法转换: NumberFormatException
System.out.println(integer);
}
}
特殊的对于 int, long, float ,double 类型的包装类,new 时传入的形参是 null 是会报错的:NumberFormatException: null
空异常
public class simulateInt {
// 基本数据类型 --> 包装类
public static void main(String[] args) {
Integer integer = new Integer(null);
System.out.println(integer);
}
}
特殊的对于 boolean 值的 包装类所传入的形参,如果不是 指定的 true / false 的字符串,有一个校验的操作,会将不是对应 true/false 的内容一律(包括 null 值) 置为 false 赋值上,如下
public class simulateInt {
// 基本数据类型 --> 包装类
public static void main(String[] args) {
Boolean b = new Boolean("true hhh");
System.out.println(b);
Boolean b2 = new Boolean(null);
System.out.println(b2);
}
}
其中 Boolean 校验的源代码如下:
public Boolean(String s) {
this(parseBoolean(s));
}
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true")); // 如果返回的不是null,或者不是 true,都返回false;
}
3. 包装类 ——> 基本数据类型
将包装类 转换为 对应的基本数据类型,使用 包装类.xxxValue()
的方法,其中 xxx表示你要转换的是什么基本数据类型,如 intValue(),doubelValue()
如下代码:
public class simulateInt {
// 包装类 ————> 基本数据类型
// 使用 包装类的xxxValue()方法
public static void main(String[] args) {
Integer i1 = new Integer(18);
int num = i1.intValue();
short num2 = i1.shortValue();
double d = i1.doubleValue();
System.out.println(num);
System.out.println(num2);
System.out.println(d);
}
}
4. 自动拆箱 和 自动装箱
JDK5之后,支持自动装箱,自动拆箱。但类型必须匹配。
- 自动拆箱: 自动将包装类 自动转换为 ——> 基本数据类型
- 自动装箱: 自己将基本数据类型 自动转换为 ——> 包装类
如下代码:
public class simulateInt {
// 自动拆箱 和 自动装箱
public static void main(String[] args) {
int num = 10;
Integer i1 = num; // 自动装箱 : 将基本数据类型 转换为 包装类
System.out.println(i1 + 1);
System.out.println(i1.toString());
int num2 = i1; // 自动拆箱:将包装类转换为 基本数据类型
System.out.println(num2 + 1);
// num2.toString; 不是类无法点出
Boolean b = true; // 自动装箱
System.out.println(b);
boolean b2 = b; // 自动拆箱
System.out.println(b2);
}
}
5. String ——> 包装类,基本数据类型
对于将String 类型转换为 包装类,基本数据类型。
使用 包装类.parseXxx(字符串)
的方法 其中的 xxx 表示要转换的 基本数据类型如: Double.parseDouble(字符串),Integer.parseInt(字符串)
转换为了包装类,还是基本数据类型都是一样的,因为 jdk5 可以自动拆箱和装箱
错误转换,不要使用”强制类型转换“ 字符串是无法直接强制转换为 对应的 基本数据类型的。
public class simulateInt {
// String 转换为 包装类/基本数据类型
// 使用 包装类.pasexxx()
public static void main(String[] args) {
String str = "123";
Integer integer = (Integer)str; // 报错,字符串无法直接转换为基本数据类型
}
}
正确的转换:
public class simulateInt {
// String 转换为 包装类/基本数据类型
// 使用 包装类.pasexxx()
public static void main(String[] args) {
// 整数
String str = "123";
Integer integer = Integer.parseInt(str);
System.out.println(integer.toString());
int num = Integer.parseInt(str);
System.out.println(num);
// 浮点数
String str2 = "3.1415926";
Double d = Double.parseDouble(str2);
System.out.println(str2.toString());
double d2 = Double.parseDouble(str2);
System.out.println(d2);
}
特殊的对于使用 Boolean 包装类如果传入的不是对应的 true/false ,一律返回的是 fasle
public class simulateInt {
public static void main(String[] args) {
String str = "true";
Boolean b = Boolean.parseBoolean(str);
System.out.println(b.toString());
boolean b2 = Boolean.parseBoolean(str);
System.out.println(b2);
String str2 = "true hello";
Boolean b3 = Boolean.parseBoolean(str2); // 不是 true/false 一律false返回
System.out.println(b3.toString());
boolean b4 = Boolean.parseBoolean(str2);
System.out.println(b4);
}
}
6. 基本数据类型 ——> String
将基本数据类型 转换为 String 的方式有两种
- 使用
"+"
拼接上一个字符串,自动提升转换 - 调用 String 重载的
字符串.valueOf()
的方法,需要注意的是这是:在字符串的类型的方法。
**方式一: 使用 + **
public class simulateInt {
// 方式一: 使用 "+" 拼接上
public static void main(String[] args) {
int num1 = 10;
String str = num1 +"";
System.out.println(str);
}
}
方式二:使用 字符串.valueOf()
public class simulateInt {
// 将基本数据类型转换为字符串: 使用字符串.valueOf()的方法
public static void main(String[] args) {
int num = 12;
String str1 = String.valueOf(num); // 将 int 转换为 String
System.out.println(num);
float f = 3.1415926f;
String str2 = String.valueOf(f); // 将 float 转换为 String
System.out.println(str2);
Double d = new Double(3.14);
String str3 = String.valueOf(d); // 将包装类Double 转换为 String
System.out.println(str3);
}
}
7. 总结:
- 八种基本数据类型对应的包装类,int –> Integer , char –> Character
- 在Java当中字符串 String 和 数字直接进行类型转换的话,可能会遇到
NumberFormatException
异常 - 对应包装类,所传的参数不要是 null ,不然报 null异常
- 对应特殊的 Boolean 包装类,具有校验的功能,如果所赋的值/传形参 不是 true/false,这两者一律返回 false 包括 null
- jdk5 以后 支持 自动拆箱,自动装箱
- 如下 基本数据类型 ——> 包装类,包装类 ——> 基本数据类型,String ——> 包装了,基本数据类型,基本数据类型 ——> String的示图
8. 最后:
限于自身水平,其中存在的错误,希望大家可以给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83001.html