java 数值计算_Java 数值计算 (一) 基本数值类型

一 Java 语言基本数值计算

我们知道, Java语言定义了六种基本的数值类型 (四个整型,两个浮点型):byte, short, int, long,

float, double。 (java 语言共8中数值类型,另两种是char, boolean,

前者表示字符类型,后者表示布尔类型)

int i = 3; 中 常量 3 的数值类型是 int。

long l = 3; 中 3 依然是 int 类型,

但编译器在运行时根据左边的类型要求,把它转化成 long 。因为 long (64位) 比 int

(32位)数值范围大,所以这种隐式转化可以的。但反过来必须用显示转换:

long l = 3;

int i = l; // 编译错误 ,必须用 int i = (int)

l; 因为这样强制转换可能会丧失精度。

比较下面两个结果有什么不同:

public class JavaLang {

public static void main(String[]args) {

long l1 =

Integer.MAX_VALUE + 1;

System.out.println(l1);

long l2 =

Integer.MAX_VALUE + 1L;

System.out.println(l2);

}

}

没错 ,结果一个正,一个负:

-2147483648

2147483648

原因是, long

l1 = Integer.MAX_VALUE + 1; 首先按照 int 计算右边的算式, 因为超过 int

最大值,出现溢出, 从正最大(2147483647)变为负最大。 (印证了物极必反,乐极生悲)。而

long l1 = Integer.MAX_VALUE + 1L; 中, 因为 1L 声明为

long 类型,所以右边先以 long 型进行运算,没溢出发生。

所以,Java 语言基本数据类型预算时采取的策略是,

采用 int 作为缺省的运算类型, 条件是,参与运算的所有操作数类型是 int, byte, short。

当操作数中有 long 类型,则采用 long类型作为运算,即先把运算的各项转换成long, 然后再运算。

为什么下面两个声明一个没问题,一个有编译错误:

long l =

3; // 没问题, 因为 3 类型是 int ,而 int 向 long 隐性转换。

float f = 3.0; //

有编译错误, 因为 3.0 类型是 double,double

向float转换,由于是范围缩小,所以,必须用显示的转换: float f = 3.0F

为什么下面这个没有编译错误:

byte b = 100;

short s = 100;

因为 java 语言自动把  常量 100 当成 byte

和 short类型。

为什么下面却有编译错:

byte b1 = 100;

byte b2 = 100;

byte b3 = b1 + b2; // 有编译错, 因为 右边 加法是用 int 进行的,和是 int 型, 转化成

byte 需显示转换, 正确的方式是 byte b3 = (byte) (b2-b1) ;

为什么会这样呢? 没啥为什么,Java 语言就是这么规定的, 兼顾了语言的严谨和效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值