数据类型强制转换

  • 基本数据类型
整数占用字节数
byte1
short2
int4
long8
浮点数占用字节数
float4
double8
字符占用字节数
char2
布尔占用字节数
boolean1

整数默认是int类型,浮点数默认是double。
长整数要加L或者l。
单精度的浮点数要加F或者f。

  • 数据类型转换
    • 默认转换
      A:从小到大
      B:byte,short,char – int – long – float – double
      C:byte,short,char之间不相互转换,直接转成int类型参与运算
    • 强制转换
      A:从大到小
      B:可能会有精度的损失,一般不建议这样使用。
      C:格式:
      目标数据类型 变量名 = (目标数据类型) (被转换的数据);
float f1 =  12.123456789;
float f2 = 12.123456789f;
float f3 = (float)12.123456789;

上述代码,f1会报错,因为java浮点默认类型是double。
f2、f3的区别在于:f2本身就是float类型,f3是通过一个double类型强制转换得到的。

byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
short s1=3;
short s2=3;
short s3 = s1 + s2;
char c1=3;
char c2=4;
char c3 = c1 + c2;

byte b4  = 3 + 4;
short s3 = 3 + 4;
char c3  = 3 + 4;

上述代码,b3、s3、c3会报错,因为byte、short、char在运算时,会自动转换成int类型,右边的int类型赋值给byte、short、char类型便会报错,加上强制类型转换可以通过编译。比如b = (byte) (b1+b2);
byte b4 = 3 + 4;不会报错,是因为jvm会自动装箱转换,实际是byte b4 = (byte) 3 + 4;

byte b1 = 130;
byte b2 = (byte)130;

上述代码,b1会报错,因为byte类型数值范围为-128~127之间。b2虽然强制转换成byte类型,但是会造成数据丢失,b2最终打印值为 -126

System.out.println("hello" + 'a' + 1);
System.out.println('a'+ 1 + "hello");
System.out.println("5+5=" + 5 + 5);
System.out.println(5+5+"=5+5");

输出:
helloa1
98hello
5+5=55
10=5+5

字符串参与运算就是字符串的连接

  • 浮点型运算注意点
float f4 = 12.348f;
float f5 = 12.345f;
System.out.println(f4);
System.out.println(f5);
System.out.println(f4-f5);

输出:
12.348
12.345
0.0029993057

因为浮点型运行结果会丢失精确度。

改进:

 BigDecimal b1 = new BigDecimal(
         Float.toString(f4));
 BigDecimal b2 = new BigDecimal(
         Float.toString(f5));
 float result = b1.subtract(b2).
         floatValue();
 System.out.println(result);

输出:
0.003

因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会叫的狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值