【Java】基本数据类型的转换

  • 自动类型转换:容量小的类型自动转换为容量大的数据类型。

数据类型按容量大小排序为:

示例1:

//(1)byte-> int 向上转型
byte a = 7;
int b = a;  // b=7
//(2)int-> byte 向下转型
int a = 7;
byte b = a; // 报错:Type mismatch: cannot convert from int to byte

第一种向上转型是自动执行,第二种向下转型不能自动执行,需要手动进行强制转换,否则会报错(编译期错误)。

可以通过下面方式强转:

int a = 7;
byte b = (byte)a;

在变量前的括号内填入你想转的类型(基本类型)。

  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。 

示例2:

int a = 1;
short b = 2;
byte c = 3;
// 思考:返回的 d 应该用什么类型来修饰呢?
d = a + b + c;

这貌似个选择题,备选答案有3个(int、short、byte)。 那根据上面提示,这里三种不同类型的数据进行混合运算,它们会自动转成容量最大的那个,也就是int,因此d应该是int类型的。(或者你可以依次将三种类型带入,观察观察。)

  • byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。

示例3:

char i = 'a';
int j = 3;
System.out.println(i + j); // 100

为什么char类型的 i 和 int类型的 j  能相加呢?并且结果是100。那我们可推算出i的值为97,这i明摆着不是字母‘a’吗?咋又变成97了?这里涉及到ASCII码值了。

ASCII码:上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系做了统一规定。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写字母是65(二进制01000001)。

 参照下表:

可知字符‘a’所对应的十进制就是97,这就使得上面运算程序逻辑成立。

  • 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。

示例4:

String text = "hello";
String result = text + 1 + 2 + 3;
// 思考:result值是多少?
System.out.println(result);

那有经验的伙伴,答案脱口而出:“hello123”。嗯,对滴,就是它。那下面这个呢。

示例5:

String text = "hello";
//思考: result还是“hello123”吗?
String result = 1 + 2 + text + 3;

相信有不少人入坑了。这个应该输出的是“3hello3”,嗯???小朋友,你是否有很多问号?给你总结条经验吧。 

注意:当有进行连接操作(‘+’号)时,若某部分包含字符串,那么这个字符串前边挨着的‘+’号开始,一直往后,都是按字符串形式去拼接的。

 

补充:

强制类型转换

  • 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出,格外要注意。
  • 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
  • 如: String a = “43”; int i = Integer.parseInt(a);
  • boolean类型不可以转换为其它的数据类型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值