当前位置:   article > 正文

java 数值计算_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 语言就是这么规定的, 兼顾了语言的严谨和效率。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/207421
推荐阅读
相关标签
  

闽ICP备14008679号