数据类型#

在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。

使用后缀Ll以表示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
2
3
低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double

数据类型转换必须满足如下规则:

    1. 不能对boolean类型进行类型转换。
    1. 不能把对象类型转换成不相关类的对象。
    1. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换
    1. 转换过程中可能导致溢出或损失精度,例如:
    1. 浮点转整形会直接舍去小数部分,而不是四舍五入

不同数据类型之间的运行#

1
2
byte a = 1, b = 1;
int c = a + b; // 两个byte之间运算, 结果是int
1
2
3
4
byte a = 1;
short b = 1;
char c = '1';
int d = a+b+c; // 结果为int
1
2
3
int a = 1;
long b = 1;
long c = a + b; // 结果为long
1
2
3
float a = 1.0f;
float b = 0.1f;
double c = a + b; // 两个float相加, 结果为double
1
2
3
float a = 1.0f;
long b = 1L;
double c = a + b;

总结:

  • 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修饰的变量。

  • 局部变量:在方法中的变量

  • 类常量/静态常量: 使用staticfinal关键字修饰

static修饰的属性(类变量/静态变量)或方法(类方法/静态方法),直属于类,而不属于其实例对象,不能通过实例对象调用,而是直接通过类名调用;在类中,当方法或属性被static修饰时,只能访问同样被static修饰的方法或属性,不能使用实例方法。

但是实例方法中,可以访问类方法和类变量。

总结下来就是,类的不可访问实例的,而实例的可访问类的。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class User {
// 静态变量, 类变量 直属于类的, 不属于任何实例
static String gender = "男";
// 实例变量, 属于某一个具体的实例
String name;
// 静态常量
static final String NAME = "Tiam";

void getGender(){
// 局部变量, 非静态方法中不能定义使用static修饰的变量
int age;
// static int height; // 定义报错
System.out.print(gender); // 访问Ok
}
}

类中的this指向当前的实例对象,是一个动态的值, 所以不能在静态方法中使用。