基本数据类型
- 基本数据类型有哪些:byte、short、int、long、float、double、boolean、char
- 整型:byte、short、int、long用于表示有符号的整数
- 浮点型:float、double用于表示带小数位的数字
- 字符型:char用于表示字符集中的符号
- 布尔型:boolean用于表示true/false值
基本数据类型 | 字节数 | 说明 |
Byte | 1个字节 | 字节长度的整数,八位 |
short | 2个字节 | 短整数,十六位 |
int | 4个字节 | 整数,三十二位 |
long | 8个字节 | 长整数,六十四位 |
float | 4个字节 | 单精度浮点数,三十二位 |
double | 8个字节 | 双精度浮点数,六十四位 |
char | 2个字节 | Unicode字符 |
boolean | 1个字节 | 布尔值 |
- 整型数据介绍
- 整型数据
名称 | 宽度 | 范围 |
long | 64 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
int | 32 | -2 147 483 648 ~ 2 147 483 647 |
short | 16 | -32 768 ~ 32767 |
byte | 8 | -128 ~ 127 |
- 整数字面值
-
-
-
- 整数字面值可以写为十进制,十六进制(加前缀0x或0X),八进制(加前缀0),二进制(加前缀0B或0b)
- 整数字面值用于将值赋给byte,short,,int和long类型的变量。所赋值的不能超过变量的存储范围
-
-
-
eg:byte b = 250;就会报错原因是byte 做大范围是127.
- 浮点型介绍
- float: float类型表示使用32位存储的单精度数值。在某些处理器上,单精度运行速度更快,并且占用的空间是双精度的一半,但是当数值非常大或者非常小时会变得不精确。如果需要小数部分,且精确度要求不高时,就可以考虑使用float类型。
- double: double类型表示使用64位存储的双精度数值。在sin()、cos()和sqrt()这类数学函数中,返回值都是double类型。如果需要在很多次迭代运算中保持精度,或是操作非常大的数值时,double类型是最佳选择。
- 字符介绍
char是用于存储字符的数据类型。Java的设计初衷是允许程序员编写在世界范围内均可使用的语言,因此采用了Unicode标准来表示字符。Unicode定义了一个完全国际化的字符集,能够表示全部人类语言中的所有字符,为此需要使用十六位宽度来存储。char的范围是0 ~ 65536,没有负的char值。
- 基本类型转换
- 默认转换:
- byte,short,char—int—long—float—double
- byte,short,char相互之间补转换,他们参与运算首先转换为int类型
- 强制转换:
- 格式: 目标类型 变量名 = (目标类型)值或变量名
- int a = (int) 15.7f;
- 加宽转换:当从一种基本类型转换向另一种基本类型时,如果后者的大小和前者相同或者更大,就叫做加宽转换。例如,将int(32位)转为long(64位)。此时不会有信息丢失的风险,且加宽转换是隐式发生的,不需要在代码中任何事情
- 收窄转换:收窄转换发生在从一种基本类型转换为另一种更小类型的转换中。例如,从long(64位)到int(32位)。收窄转换需要显示调用,用圆括号指定目标类型。如果long a =9876543210L;此数明显超出int的取值范围,在做转换位int类型的话就会丢失精度。
- 表达式中的自动类型提升
- 除了赋值外,在表达式中也可能会发生类型转换。在表达式中,中间值要求的精度有时会超出操作数的范围。
例如:byte a=40; byte b=50;byte c=100; int d = a*b/c;
解释:中间部分 a * b 很容易超出byte操作数的范围。为了解决这类问题,当对表达式求值时,Java会自动将每个byte,short或char操作数提升为int类型。这意味着使用int类型而不是byte类型执行子表达式a * b。因此,即时a和b都被指定为byte类型,中间表达式(50 * 40)的结果2000是合法的。
- 自动类型提升很有用,但有时候会导致难以理解的编译时错误。
例如:byte b=10; //错误 b= b*2;
解释:如上代码试图将 10 * 2 的结果(一个完全有效的byte值)保存到byte变量中,但是编译器却提示错误。当计算表达式的值时,操作数被自动提升为int类型,所以结果也被提升为int类型。因此,现在是试图将一个int类型值转为byte变量,如果不使用强制类型转换,就不能将结果赋给byte变量。
- Java定义了几个应用于表达式的类型提升规则。
- 对于一元操作符来说,如果操作数的类型是byte,short或char,运算结果提升为int类型
- 对与二元操作符来说,提升规则是从以下几条依次选择一条执行
- 如果操作数类型均为byte、short或char,那么两个数均转为int类型,结果数也将为int类型
- 如果操作数包含double类型,那么另一个操作数也转为double,结果数也将为double类型
- 如果操作数包含float类型,那么另一个操作数也转为float,结果数也将为float类型
- 如果操作数包含long类型,那么另一个操作数也转为long,结果数也将为long类型
本文学习来自此博客:https://github.com/yangchong211/YCBlogs