我是靠谱客的博主 疯狂小土豆,这篇文章主要介绍基本数据类型、包装类与String三者之间的转换(自然类型转换和强制类型转换)以及引用类型的强制类型转换以及自动拆装箱问题,现在分享给大家,希望可以做个参考。

八种基本数据类型:byte、short、int、long、float、double、char、boolean

boolean类型不能与数值间相互转化

        数值与数值之间的相互转化:

在程序运行的时候,我们经常需要将一种数值类型转化为另一种数值类型,下图给出了合法转化(自动类型转换):

 虚线代表转化可能会出现精度丢失。

上面是小类型转为大类型,大类型自然而然可以装下小类型。而想把int转为byte时,也就是大类型转为小类型时就需要强转了。例:(数值运算有自动提升机制会把类型变为默认的int类型,想转回来就需要强转)

int a=10;

byte c=(byte) a;//新数据类型 名称=(新数据类型)原数据名

强制转换可能会产生数据丢失。 

对应的包装类分别为:

byteshortintlongfloatdoublecharboolean
ByteShortIntegerLongFloatDoubleCharacterBoolean

基本数据类型变为其对应的包装类需要装箱,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
16
public 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
23
public 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三者之间内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部