java基本数据类型范围

您所在的位置:网站首页 java最大的数据类型 java基本数据类型范围

java基本数据类型范围

2023-12-18 23:27| 来源: 网络整理| 查看: 265

1. 数据类型范围

整型:

byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字节。Byte。末尾加B

short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。Short。末尾加S

有符号int:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字节。Integer。

无符号int:0~2^32-1。

long:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807。8字节。Long。末尾加L。(也可以不加L)

浮点型:

float:4字节。Float。末尾加F。(也可以不加F)

double:8字节。Double。

字符型:

char:2字节。Character。

布尔型:

boolean:Boolean。

2. 类型转换

boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。

byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为负数的问题),同时,byte当然可以直接提升到short型。

当对小于int的数据类型(byte, char, short)进行运算时,首先会把这些类型的变量值强制转为int类型进行计算,最后会得到int类型的值。因此,如果把2个short类型的值相加,最后得到的结果是int类型,如果需要得到short类型的结果,就必须显示地运算结果转为short类型。

1 //编译出错。正确的写法是:short s1 = 1;s1 = (short)(s1+1) 2 short s1 = 1;s1 = s1+1; 3 //编译通过 4 short s1 = 1;s1 += 1; 1.1自动类型转换 eg:double d = 1000;

自动类型转换 范围大的数据类型 变量 = 范围小的数据

自动类型转换,数据值的数学意义上的大小是不变的。

强制转换 范围小的数据类型 变量 = (范围小的数据类型)范围大的数据

eg:int i = (int)6.718

强制类型转换,数据值的数学意义上的大小会被改变。

**

3. 不同数据类型的运算

1+‘1’+1+1+“0”,请问等于多少 我就开始从前面一个一个测试:

public class DateType { public static void main(String[] args) { System.out.println(1+'1'); } }

控制台输出:50,那说明‘1’就表示49,在ascii码表里里面可以查到字符1对应的10进制ascii值为49,”0“表示在后面拼接一个字符0,这样就很容易知道结果了。

当我换了位置重新测试一下又发现了问题:

public class DateType { public static void main(String[] args) { System.out.println("1"+1+1); } } public class DateType { public static void main(String[] args) { System.out.println("1"+1+'1'); } }

控制台输出结果都是:111,先开始我也为第二结果为1149 说明第一个为字符时,后面不管什么类型都是字符,还有最后输出的结果的数据类型都是字符类型。 总结:不同的数据类型运算,从左往右计算,如果是整形,正常的10进制计算,遇到字符转成10进制的ascii码值计算,有字符就直接拼接字符,遇到字符的,后面都是字符,就没必要转化。

再看看下面 System.out.println(1.1 + 1);// 2.1 System.out.println(1 + 1.1);// 2.1 System.out.println(1 + 0.3);// 1.3 System.out.println(0.3 + 0.03);// 0.32999999999999996 System.out.println(1 + 0.3 + 0.33);// 1.6300000000000001 System.out.println(0.3 + 0.3);// 0.6 System.out.println(1 / 0.5 + 2);// 4.0 System.out.println(“9” + 1 / 0.5);// 92.0 System.out.println(“9” + 1 / 0.5 + 5);// 92.05 System.out.println(1 / 0.5 + 5 + “9”);// 7.09 System.out.println(1 / 0.3);// 3.3333333333333335 System.out.println(3 * 0.3);// 0.8999999999999999 System.out.println(3 * 0.4);// 1.2000000000000002 System.out.println(0.3 * 0.3);// 0.09

不难发现: 基本类型(除了boolean外)可以自动转换的,转换形式为:byte,short,char – int --long–float–double这就是自动转换的顺序了,其中byte,short,char在运算时是自动转换为int型的,而int与long运算时自动转换为long型。从上可知,float与double运算时是自动转换为double再进行计算的,int与float运算时先转换为float再运算。也就是说,表述范围小的可以自动转换为表述范围大的,(表述范围不是指类型的大小)其次,如果你要得到某一类型的数值时,也可以通过强制转换来实现 //数据转换的类型有两种,第一种是显式转换,第二种是隐式转换 //低精度类型的数据像高精度类型的数据转换的时候,永远不会溢出,并且总是成功的。 //高精度类型的数据向低精度类型的数据转换的时候,则必然会有信息丢失,有可能失败。 //从低级向高级类型的数据转换,系统会自动执行,这种类型为隐式转换。 //以下数据类型涉及到数据转换不包括字符类型和逻辑类型:这些类型精度由高到低是:byte,short,int,long,flaot,double //把高精度的数据赋值给低精度变量的数据时,必须使用显式抓换。 //执行显式转换的时候,可能会导致精度损失,只要是boolean类型以外的数据类型都可以显式转换的方式达到



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3