8-类型转换

目录

1.基本数据类型转换

1.1.自动(隐式)类型转换

1.2.强制类型转换

类型提升:

2.引用数据类型转换

2.1.自动类型转换——把子类对象交给父类的引用(向上转型)

2.2.强制类型转换——把父类对象交给子类的引用(向下转型)

3.int和String之间的相互转换

3.1.int转成String

3.2.String转成int


java是一门强类型语言,当不同类型之间的变量相互赋值时,会有严格的校验。当类型不一致时,就会发生类型的转换。java中类型转换分为两类:自动类型转换强制类型转换

造型(casting)的含义是把一种类型的值赋给另一种类型的变量。

基本数据类型和引用数据类型的变量都可以进行造型。但基本类型和引用类型变量之间不能相互转换。

1.基本数据类型转换

常见基本数据类型范围的大小

这是java中常见的7种基本数据类型之间的范围大小关系,这7种基本数据类型之间存在类型转换。 

1.1.自动(隐式)类型转换

从小类型到大类型,不需要强制转换符。

int a = 10;
long b = 20;
long c = a + b;

在这段代码中,计算的c一定是先将a进行数值提升为long类型再与b进行加运算。

1.2.强制类型转换

从大类型到小类型,需要强制转换符实现强制转换。

格式:范围小的数据类型 范围小的变量名 = (范围小的数据类型)范围大的数据类型

long a = 10;
int b = (int)a;

注:

1).强制类型转换一般不推荐使用,因为可能会发生精度丢失,数据溢出。

2).强制类型转换不是一定能成功,互不相干的类型之间无法强转,(如int和boolean是不兼容的类型)。

易错:

byte和byte的运算

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c); //会编译报错:不兼容的类型:从int转换到byte可能会有损失。

原因:虽然a和b都是byte,但是计算a + b会先将a和b都提升成int再计算,得到的结果也是int,这时赋值给a,就会出现上述错误。

结论:由于计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了硬件上实现方便,诸如byte和short这种低于4个字节的类型,会先提升成int,再参与计算。

正确写法:

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

PS:

public class Test {
    public static void main(String[] args) {
        int a = Integer.MAX_VALUE;
        long b = a + 1L;
        int c = (int) b;
        System.out.println(b);
    }
}

public class Test {
    public static void main(String[] args) {
        int a = Integer.MAX_VALUE;
        long b = a + 1L;
        int c = (int) b;
        System.out.println(c);
    }
}

类型提升:

1).不同类型的数据混合运算,范围小的会提升为范围大的。

2).对于short,byte这种比4个字节小的类型,会先提升成4个字节的int,再运算。

2.引用数据类型转换

引用数据类型的转换是有条件的,不能够随便转。转换的条件是:只能够在有继承关系的类型间进行。正因为只能沿着继承树进行转换,才有向上转型向下转型的概念。(在多态介绍中详细讲解)

2.1.自动类型转换——把子类对象交给父类的引用(向上转型)

2.2.强制类型转换——把父类对象交给子类的引用(向下转型)

3.int和String之间的相互转换

3.1.int转成String

int num = 10;
//方法1
String str1 = num + "";
//方法2
String str2 = String.valueof(num);

3.2.String转成int

String str = "100";
int num = Integer.parseInt(str);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值