八种基本数据类型:byte、short、int、long、float、double、char、boolean
boolean类型不能与数值间相互转化
数值与数值之间的相互转化:
在程序运行的时候,我们经常需要将一种数值类型转化为另一种数值类型,下图给出了合法转化(自动类型转换):
虚线代表转化可能会出现精度丢失。
上面是小类型转为大类型,大类型自然而然可以装下小类型。而想把int转为byte时,也就是大类型转为小类型时就需要强转了。例:(数值运算有自动提升机制会把类型变为默认的int类型,想转回来就需要强转)
int a=10;
byte c=(byte) a;//新数据类型 名称=(新数据类型)原数据名
强制转换可能会产生数据丢失。
对应的包装类分别为:
byte | short | int | long | float | double | char | boolean |
Byte | Short | Integer | Long | Float | Double | Character | Boolean |
基本数据类型变为其对应的包装类需要装箱,java可以自动装箱
包装类转换为对应的基本数据类型需要拆箱,java可以自动拆箱
我们以int、Integer、String为例,写出他们三者之间转化的语句;
1)int=>Integer Integer a=new Integer(primitive);/Integer a=primitive(自动装箱写法)
2)Integer=>int int a = Integer对象.xxxValue();/int a=对象名(自动拆箱)
3)Integer=>String String str = Integer对象名.toString();强转
4)String=>Integer Integer a = new Integer(String str);强转
5)int=>String String str = String.valueOf(primitive);装箱
6)String=>int int a = Integer.parsexxx(str);拆箱
引用类型的强制类型转换:
如下两个类,一个User父类和一个继承于User的Student子类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class User { private int age; private String name; public int getAge(){ return this.age; } public String getName(){ return this.name; } public void setAge(int age){ this.age = age; } public void setAge(String name){ this.name = name; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public class Student extend User{ private int age; private String name; private String schoolName; public int getAge(){ return this.age; } public String getName(){ return this.name; } public String getSchoolName(){ return this.schoolName; } public void setAge(int age){ this.age = age; } public void setAge(String name){ this.name = name; } public void setSchoolName(String schoolName){ this.schoolName= schoolName; } }
在main方法中如下初识化 一个实例:
User user = new Studtnt();
如果我们想调用子类的方法getSchoolName(), 我们创建的对象是无法调用的,我们需要进行类型强转:
Student stu = (Student) user
这样stu就可以调用子类的方法了,这里是使用了引用类型的强制转换
自动拆装箱 :
为什么会有包装类:
- 不符合面向对象思想,基本类型不是对象
- 涉及到集合时基本类型用不了(list、map),需要包装类完成
- 可以使用基类存在的方法
- 但是会占用更大内存
自动拆装箱:
编译器行为
自动装箱是在编译Integer a = 3时会自动调用装箱方法Integer.valueOf(3)
自动拆箱是在编译int b = a 时会自动调用拆箱方法a.intValue()
最后
以上就是疯狂小土豆最近收集整理的关于基本数据类型、包装类与String三者之间的转换(自然类型转换和强制类型转换)以及引用类型的强制类型转换以及自动拆装箱问题的全部内容,更多相关基本数据类型、包装类与String三者之间内容请搜索靠谱客的其他文章。
发表评论 取消回复