算术运算符和类型转换

阅读:171
1.运算符

在Java中,+、-、*、/,表示加、减、乘、除运算。这里有一下几点需要注意:

  • 如果两个操作数都是整数时,表示整数除法。
  • 除法时两个操作数有浮点时表示浮点除法。
  • %表示求余数操作或者叫做取模。
  • 整数被0除会抛出异常(异常后面会详细讲解)。
  • 浮点数被0除将会得到一个无穷大的或NaN结果。

下面举个例子:

13/2等于6;19%2等1;15.0/2等于7.5。

2.数值类型之间的转换

不同类型的数值在做数学运算时,操作数会发生自动类型转换。如下图所示:

image-20200322180954511.png

上图中,实心箭头表示无信息丢失的转换。如果是虚心箭头,表示有可能有精度丢失的转换。箭头的方向是会自动转换的方向。这里有两个问题:

  • 为什么会自动类型转换呢

    比如byte类型和int类型做加法,操作数会自动转换为int型。如果不转换为结果为byte的数字,有可能数字范围超过byte类型,造成结果错误。

  • 为什么会有精度丢失呢

    比如一个大整数,转换为float类型,由于int位数比float大,就有可能造成精度丢失。比如代码:

    public class TypeTest {
        public static void main(String[] args){
    
            int i = 234513241;
            float f = i;
            System.out.println(f);
    
        }
    }
    

    可以看到结果为:2.34513248E8。

    那现在我们总结一下:

  • 如果两个操作数有一个是double类型,另外一个操作数就会自动转换为double;
  • 否则,就float最大,有一个是float类型,另外一个操作数会转换为float;
  • 否则,有一个是long类型,另外一个也会转换为long;
  • 否则,有一个是int类型,就会转为int类型。
3.强制类型转换

有时候,我们需要把double强制转化为int,这就需要我们进行强制类型转化。Java是允许强制类型转化的,如下:

double d = 3.141;

int i = (int)d;

这样,i的值为3;强制类型转换会把小数部分截取掉,变为整型。注意,这里不是四舍五入。

注意:如果把一个类型强制转换为另一种类型,超出了目标类型的表示范围,结果就会变成不同的值。比如:

int i = 300;

byte b = (byte)i;

那么b=44。

最后,不要忘记多做练习。


© 版权归知否网(zhifou.net)所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权知否网将依法追究其法律责任。
读后有收获,请作者喝杯咖啡

精彩留言

发表评论
更多精彩内容,请关注微信公众号