Java第二天
数据类型
作用:可以约束用户定义所变量占用的内存空间大小和内存空间中所能存储的数据类型。
字节型是最小的整数类型。
字节:一小组相邻的二进制数码,通常以8位作为一个字节。例:01111111(第一位是符号位)。
float变量在存储float型数据时保留8位有效数字,其取值是从第一个非0开始,向后取8位;doublet变量在存储double型数据时保留16位有效数字,其取值是从第一个非0开始,向后取16位。
如果我们定义了byte类型的变量,约束了类型为整数,其整数的范围是-128~127。
类型 | 位数 | 占用存储空间(内存中) | 表数范围 |
---|---|---|---|
byte | 8位 | 1字节 | -128~127(-2^7~2^7) |
short | 16位 | 2字节 | -2^15~2^15-1 |
int | 32位 | 4字节 | -2^31~2^31-1 |
long | 64位 | 8字节 | -2^63~2^63-1 |
float | 32位 | 4字节 | -3.403E38~3.403E38 |
double | 64位 | 8字节 | -1.798E308~1.798E308 |
字符类型(char) | 16位 | 2字节 | - |
布尔类型(boolean) | - | 2字节 | - |
注意:浮点(小数)类型的数据存储方式与数值(整数)型不一样,所以浮点类型表示的数据范围要比数值类型的最大表数范围大(float的表数范围>long的表数范围)。
变量、常量(被数据的量包含)
常量
定义:在程序的运行期数据不发生变化的量。例:整数的常量(整型、小数型)、字符、布尔数值、空常量(null)。
变量
定义:在程序运行的过程中存储可以变化的数据的量(使用内存空间存储)。
使用范围:只能在当前的大括号和当前大括号的自括号内使用(方法中或语句块中)。
定义位置:定义在方法或语句块中。
定义语法:
//数据类型 变量名 = 初始值;
int i = 0;
double d = 0.0;
float f = 1.0f;
注意:①在定义任何的变量时必须要赋予初始值;变量名不可重复!
②在定义float类型的变量时一定要在初始值后加f
;在定义double类型的变量时初始值后可加可不加d
(同long的l
);在定义char类型的变量时初始值一定要写在单引号''
中,且只能存放一个字符。
③类的属性定义方式与变量相似,但不需要赋予初始值;变量定义在类中时作为类的属性使用,可不需要赋予初始值(有默认的初始值)。
④类属性的初始值
类型 | 初始值 |
---|---|
byte/short/int/long | 0 |
float/double | 0.0 |
char | '\u0000' (u0000可翻译为一个空格),也可写为' ' |
boolean | false |
数据类型的转换
注意:除boolean类型以外都可转换;同类型变量在计算时不会有类型提升;
自动转换
整数类型:
①变量在做运算时会有溢出的情况,JAVA语言会进行自动转换处理。
②小空间的数据类型向大空间的数据类型转换。例:byte、short、char会转换(提升)为int。
③int数值溢出时也会溢出,但不会自动转换,而是直接损失精度。
④char在做运算时,若为字符时则会以ASCⅡ码的数值进行计算。
⑤任何整数类型和long类型做运算都会自动转换成long类型。
⑥常量在运算时,只要不超出java定义数据类型的最大表数范围就不会报错和自动提升。
例:
long num = 2200000000;//所赋的值超出了int类型的最大表数范围,后必须加L或小写l
long num = 198;//所赋的值未超出int类型的最大表数范围,可省略L或l
浮点类型(小数类型)
①float类型和常量计算不会有类型提升;float类型与所有整数类型计算时都会自动转换为float。
②double类型和常量计算时不会有类型提升;double类型与float类型计算时会自动提升为double类型;double类型与所有整数类型计算时都会自动转换为double。
强制转换
语法:
//目标类型 变量名 = (目标类型)值/变量名;
//定义一个double类型的变量d
double d = 10.3;
//将double类型的10.0强制转换成int类型的10,并赋值给i
int i = (int)d;
//此时i的值为10
//将强制转换变量d后的数值赋值给b
int b = 20;
b = (int)d;
//此时b的值为10
//将20.0强制转换为20
int c = (int)20.5;
//此时c的值为20
注意:①强制转换可能会损失精度,被转换的数值不可超过目标数据类型的最大表数范围。
②浮点类型转换为整数类型时会舍弃小数位。
③浮点类型之间可任意转换;字符类型可转换为任一数据类型(除布尔类型)。
④整数类型可转换成相对应数值的字符类型。
运算符
1.算术运算符
四则运算符:+、-
、*、/(取整)、%(取余)、++(自增)、--
(自减)
自增:将变量或数值的值加一
①后自增:先使用当前值,后自增
②前自增:先自增,后使用自增后的值
自减:将变量或数值的值减一
①后自减:先使用当前值,后自减
②前自减:先自减,后使用自减后的值
int a = 10;
int b = 0;
b = a++;
//此时的b的值为10
int a = 10;
int b = 0;
b = ++a;
//此时的b的值为11
2.赋值运算符
赋值:=、+=、-=
、*=、/=、%=(例:a+=5相当于a=a+5,其他同理 )
3.比较运算符
等于:==
不等于:!=
大于:>
大于等于:>=
小于:<
小于等于:<=
4.逻辑运算符
名称 | 符号 | 判断逻辑 | 执行条件 |
---|---|---|---|
与、并且 | & | 一假为假,全真为真 | 表达式全部执行 |
或 | | | 一真为真,全假为假 | 表达式全部执行 |
(智能)短路与、并且 | && | 一假为假,全真为真 | 只执行到为假的表达式,不再向下执行 |
(智能)短路或 | || | 一真为真,全假为假 | 只执行到为假的表达式,不再向下执行 |
异或 | ^ | 相同为假,不同为真 | 表达式全部执行 |
取反 | ! | 取相反结果 | - |
5.位运算符
反码:原码符号位不变,余下取反
补码:反码的最后侧加一
计算机中的所有二进制计算都使用补码
3的原码=反码=补码
3 | 原码 | 反码 | 补码 |
---|---|---|---|
正数3 | 0000 0011 | 0000 0011 | 0000 0011 |
负数3 | 1000 0011 | 1111 1100 | 1111 1101 |
左移(移动一位相当于乘2):将参与运算的值的二进制数据向左移动,低位产生的空位用0补齐。
语法:变量名/数值 << 位移数 例:a << 2;
例:2的二进制 0000 0010
2左移两位后 0000 1000 此二进制对应的值为8
右移(移动一位相当于除2):将参与运算的值的二进制数据向右移动,当高位产生空位时,若高位是0则使用0来补齐,若高位为1则使用1来补齐(右移是带着符号位移动)。
无符号右移:将参与运算的值的二进制数据向右移动,当高位产生空位时用0补齐。