java基础回顾--基本数据类型
Java是一种强类型语言,这就意味着必须为每一个变量声明一个类型。java中数据类型分两种,基本数据类型和引用数据类型
1. 基本数据类型
1.1 java的八种基本类型
包括4种整形(byte,short,int,long),两种浮点型(float,double)
一种字符型(char),一种布尔型(boolean)
Java中没有无符号类型。
1.1.1 整形
四个基本整形都是有符号整数,1字节有八位,每种类型其中第一位是符号位(注:符号位0代表正,1代表负)
类型 | Value | 取值范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | -32768 ~ 32767 |
int | 4字节 | -231 ~ 231-1 (约21亿) |
long | 8字节 | -263 ~ 263-1 |
通常情况下,int类型最常用,byte和short主要用于特定的应用场合。
- byte
byte byte_type;
- short
short short_type;
- int
int int_type;
- long
long long_type;
long L1=555;//不加L后缀不出错,是long 类型 long L2=55555555555;//不加L后缀出错,已经超过int表示的范围。
long L1 = 555;//不加L后缀不出错,自动转换类型,L1是long类型
long L2 = 55555555555;//不加L后缀出错,已经超过int表示的范围。
注:长整形需要在定义时加上“L”或者“l”后缀,建议大写,小写容易与数字“1”混淆
1.1.2 浮点型
浮点型用于表示常见的小数。
类型 | Value | 取值范围 |
---|---|---|
float | 4字节 | -3.404E38 ~ 3.403E38 |
double | 68字节 | -1.798E308 ~ 1.798E308 |
浮点型计算存在舍入误差。很多数字不能精确表示,如果需要进行不产生舍入误差的精准数字计算(例如银行系统),需要使用BigDecmal类。
- float
float f = -0.1f;
- double
double d = 1.0/10;
尽量避免在比较中使用浮点数。
float f = -0.1f;
double d = 1.0/10;
double d1 = 1/10; //d1!=d d1=0.0,d=0.1
double d2 = 17732582089;//会报错,java中手动输入的整形都是int类型,这个数字超过范围,需要加".0"或者加D,d后缀,.0代表是浮点数,浮点数默认是double型
System.out.print(f==d); //输出false
1.1.3 字符型
- char(2字节) char 类型用来表示在Unicode编码表中的字符。用单引号来表示字符常量。
char ch = 'a'; char ch1 = '五';
char ch = ''//编译出错,引号内必须有字符
char 用于表示单个字符。通常表示字符常量。例如:'A’是编码为65所对应的字符常量。
Unicode编码被设计用处理各种语言的所有文字,它占2个字节,可允许有65536个字符;其中8位的ASCII码包含在Unicode中,是从0~127的。
char 是在0 ~ 65535之间取值,运算时直接当做整数进行运算。可以把0 ~ 65535之间的整数直接转型为char。
‘A’ 是一种字符,它与 “A” 是不同的,“A” 表示含有一个字符的字符串。
java中可以使用’'来将其后的字符转变为其他的含义。char c2 = ‘\n’; //表示换行符
特殊字符的转义序列符:
转义符型 | 含义 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表符 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\" | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
1.1.4 布尔型
- boolean
- 布尔型值只能是true和false,boolean型的位深度,与虚拟机有关。
- 不可以使用0或非 0 的整数替代false和true,这点和C语言不同。
- Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示。———《java虚拟机规范 8版》
1.2 整形数据的三种表示方式 ---- 十进制、八进制、十六进制
1.2.1 十进制
十进制不用多介绍,就是我们常用的表示方式。
byte b = 200;//注意这么表示是错误的,超过了byte的最大范围
int length = 128;
byte b_length = -12;
1.2.2 八进制
八进制整数只允许使用阿拉伯数字0~7,同时在定义时要在该数的前面放置一个0,
int six = 06;
long nine = 011L;
1.2.3 十六进制
十六进制数由16个不同的符号组成。在定义时要在该数的前面放置一个0x。
0 1 2 3 4 5 6 7 8 9 a b c d e f ,其中a ~ f 分别代表10 ~ 15。注意A~F代表同样的含义。(这是java中少数几个不区分大小写的地方)
int one = -0x0001; //-1
int four = 0x0004; //4
int eleven = 0x000b; //11
//0x与0X都表示十六进制
long seventeen_1 = 0x11L; //17
long seventeen_2 = 0X11L; //17
1.2.4 整形数据的进制转换(java自带的方法实现)
byte b_length = 12;
//byte类型十进制数12 转换为2进制表示
System.out.println(Integer.toBinaryString(b_length));
//byte类型十进制数12 转换为8进制表示
System.out.println(Integer.toOctalString(b_length));
//byte类型十进制数12 转换为16进制表示
System.out.println(Integer.toHexString(b_length));
1.3 浮点型数据常用的 两种表现形式 ---- 十进制、科学计数法
1.3.1 十进制
普通的写法,例如:3.14 314.0 0.314
1.3.2 科学计算法表示
例如:314e2 314E2 314E-2 aex=a*10x
double b = 314e2; //31400.0
double b2 = 314e-2; //3.14
1.4 打印数据类型
public static void main(String[] args) {
int a=12;
//调用方法进行打印
System.out.println(getType(a));
}
//打印类型方法
public static String getType(Object test) {
return test.getClass().getName().toString();
}
2. 数据类型转换
2.1 自动类型转换(隐式转换)
java中自动类型提升的顺序为:
- byte、short、char --> int --> long --> float --> double( float范围大于long )
容量小的类型可以自动转换为容量大的类型。(低字节转换成高字节,不会损失精度)
java语言的整形常量默认是int,浮点型常量默认是double。
byte i = 120;
//实际上在java中120首先是int类型的,然后再自动转换成byte型(char、short型同理),如果在范围之内,int如果范围-128~127,可以自动转换成byte,int范围0 ~ 65535,也可以自动转char。
//如果大于byte类型变量的最大值,则会报错,所以long类型需要加后缀,强制类型进行转换。
//float类型与double是一样的道理,java中浮点型默认是double型,所以定义float变量需要加后缀告诉编译器这里是float。
byte b = (byte)-2; //强制转换
byte bb = (byte)-129; //强制转换出错
2.2 强制类型转换(显示转换)
高字节数转换成低字节数,会损失精度;“大”数转换成“小“数,要强制转换。
long l = 100L;
float f = 123f;
float f1 = l; //long型转换成float是自动转换
long l1 = (long)f; //float转换成long要强制转换
int i = 97;
char ch = (char)i; //ch结果为'a'
int ii = i+ch; //ii为194,char类型运算时直接当做整数进行运算。
//做二元运算的时候,会有类型提升问题,char与int运算,结果是int型,int与long运算,结果是long型。
3. 变量的分类
- 在方法体外,类体内声明的变量称为成员变量。
- 在方法体内部声明的变量称为局部变量。
- 二者在初始化方面的异同:
同:都有生命周期
异:局部变量除形参外,需显式初始化 - 补充:分配空间给变量,赋予初值即为初始化。显式初始化即为手工给予初值,否则为隐式初始化,将内容设置为默认值。
int i = 25; //显示初始化i为25