Java的八种基本数据类型
数据类型#
在Java中一共有八种基本数据类型,分别是
-
byte
-
short
-
int
-
long
-
float
-
double
-
boolean
-
char
其中有4种整形(byte、short、int、long),两种浮点型(float,double),一种布尔类型(boolean)和一种字符类型(char)。
string不属于基本类型!!!
整形#
byte占用一字节(1Byte),等于8位(8bit),能表示的范围在-2^7~2^7-1(-128~127)之间。
常用于大型数组中以节省内存。
默认值为0。
short占用两个字节(2 Byte),等于16位(16 bit),能表示的范围在-2^15~2^15-1 (-32768~32767)之间。
默认值为0。
int占用四个字节(4 Byte),等于32位(32bit),能表示的范围在-2^31~2^31-1 (-2,147,483,648~2,147,483,647)之间。
是整形中最常用的类型,一般整形默认为int类型。
默认值为0。
long占用八个字节(8 Byte),等于64位(64bit),能表示的范围在-2^63~2^63-1 (-9,223,372,036,854,775,808~9,223,372,036,854,775,807)之间。
默认值为0L。
使用后缀L或l以表示long型,通常使用大写L,因为小写l易与数字1混淆。
eg:long a = 2,147,483,648L
浮点型#
float占用四个字节,等于32位(32 bit),单精度浮点数。
默认值为0.0f。
double占用八个字节,等于64位(64 bit),双精度浮点数。
一般浮点数默认为double类型。
默认值为0.0d。
或者使用后缀D修饰,eg:7D表示的是double类型而不是int类型。
布尔#
如果boolean是单独使用:boolean占4个字节。
如果boolean是以“boolean数组”的形式使用:boolean占1个字节。
boolean只有两个值,true或false。
默认值为false
字符#
char占用两个字节,16位。是一个单一的16位Unicode字符。
最小值:\u0000 (0)
最大值:\uffff (65535)
默认值为: ‘u0000’
注意:局部变量不具有默认值,类变量和实例变量 才有默认值
类型的隐式转换(自动转换)#
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级。
1 | 低 ------------------------------------> 高 |
数据类型转换必须满足如下规则:
-
- 不能对boolean类型进行类型转换。
-
- 不能把对象类型转换成不相关类的对象。
-
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
-
- 转换过程中可能导致溢出或损失精度,例如:
-
- 浮点转整形会直接舍去小数部分,而不是四舍五入
不同数据类型之间的运行#
1 | byte a = 1, b = 1; |
1 | byte a = 1; |
1 | int a = 1; |
1 | float a = 1.0f; |
1 | float a = 1.0f; |
总结:
-
byte、short、int、char之间任意几个相运行(即使没有int相运算),结果都为int
-
byte、short、int、char、long之间,只要有long存在,结果都为long
-
byte、short、int、char、long、float、double之间,只要有float或double,结果都为double
-
boolean不能参与运算。
如何判断表达式运算结果的类型:先看表达式中是否存在float或double类型的值,有结果就为double,没有再看是否有long,有就结果为long,没有结果为int。
变量类型#
在类中几种不同类型的变量:
-
实例变量:在方法之外的变量,没有 static 修饰
-
类变量/静态变量:在方法之外,且使用static修饰的变量。
-
局部变量:在方法中的变量
-
类常量/静态常量: 使用
static和final关键字修饰 -
…
static修饰的属性(类变量/静态变量)或方法(类方法/静态方法),直属于类,而不属于其实例对象,不能通过实例对象调用,而是直接通过类名调用;在类中,当方法或属性被static修饰时,只能访问同样被static修饰的方法或属性,不能使用实例方法。
但是实例方法中,可以访问类方法和类变量。
总结下来就是,类的不可访问实例的,而实例的可访问类的。
举例:
1 | public class User { |
类中的
this指向当前的实例对象,是一个动态的值, 所以不能在静态方法中使用。









