Java定义了八种基本数据类型:byte,short,int,long,char,float,double,boolean。java
Java的八种基本类型说明以下所示,其中每一种都有特定的格式和大小 |基本类型|说明|字节数 |:----:|:----:|:----: |byte|字节长度的整数,八位|1个字节 |short|短整数,十六位|2个字节 |int|整数,三十二位|4个字节 |long|长整数,六十四位|8个字节 |float|单精度浮点数,三十二位|4个字节 |double|双精度浮点数,六十四位|8个字节 |char|Unicode字符|2个字节 |boolean|布尔值|1个字节程序员
基本类型的字面值有四种子类型:整数字面值,浮点数字面值,字符字面值,布尔字面值数组
Java定义了四种整数类型:byte,short,int,long。全部这些类型都是有符号的、正的整数或者负的整数。Java不支持无符号(正值)的整数。博客 名称|宽度|范围 :--:|:--:|:--:| 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 ~ 127ide
当中,最经常使用的整数类型是int。函数
整数字面值能够写为十进制,十六进制(加前缀0x或0X),八进制(加前缀0),二进制(加前缀0B或0b)性能
//十进制 int x=10; //十六进制数,即十进制的32 int y=0x20; //八进制,即十进制的15 int z=017; //二进制,即十进制的7 int u=0b0111;
整数字面值用于将值赋给byte,short,int和long类型的变量。所赋值不能超出变量的存储范围设计
byte b = 250;
long a = 120;
long a = 99999999999;
若是整数字面值太长,可读性会受到影响。code
//十进制 int x=1_000_000; //十六进制数,即十进制的32 int y=0x2_0; //八进制,即十进制的15 int z=0_17; //二进制,即十进制的7 int u=0b0_111;
浮点数也称为实数,当计算须要小数精度的表达式时使用。 名称|宽度|范围 :--:|:--:|:--:| float|32|1.4e-045 ~ 3.4e+038 double|64|4.9e-324 ~ 1.8e+308对象
float索引
double
浮点数包含如下四个部分
例如,在1.7e8中,1是整数部分,7是小数部分,8是指数
char是用于存储字符的数据类型。Java的设计初衷是容许程序员编写在世界范围内都可使用的语言,所以采用了Unicode标准来表示字符。Unicode定义了一个彻底国际化的字符集,可以表示所有人类语言中的全部字符,为此须要使用十六位宽度来存储。char的范围是0 ~ 65536,没有负的char值。
对于一些语种,例如英语、德语等,可使用八位宽度来表示这类语言的字符,使用Unicode在必定程度上会下降效率,但这是为了在全球得到可移植性而必须付出的代价。
尽管char被设计为容纳Unicod字符,但也能够用做整数类型,能够对char类型的变量执行算术运算。
字符字面值是一个Unicode字符,或者是单引号括起来的一个转义序列
例如
'a' 'b' '\b' 回退字符 '\n' 换行 '\r' 回车
布尔类型有两个值,分别为true和false。
例如,声明一个布尔变量bool
boolean bool=true;
在涉及处理不一样数据类型时,经常须要将一个变量的值赋给另外一个变量,这就须要进行类型转换
默认转换
强制转换
注意要点
!!!!!!!注意!!!!!!!! 1:在java中,任何一个整数默认为 int 类型 (1) 2:在java种,任何一个小数,默认为 double 类型( 1.0) 3:123L 或者 1231 编译器会将该数当成long类型 4:12.345f 或者12.345F 编译器会将该数当成float类型
当从一种基本类型转换向另外一种基本类型时,若是后者的大小和前者相同或者更大,就叫作加宽转换
int a=10; long b=a;
收窄转换发生在从一种基本类型转换为另外一种更小类型的转换中
long a=10; int b=(int)a;
long a=9876543210L; int b=(int)a; //输出值是1286608618 System.out.println(b);
除了赋值外,在表达式中也可能会发生类型转换。在表达式中,中间值要求的精度有时会超出操做数的范围。博客
例如:
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定义了几个应用于表达式的类型提高规则。