前言:菜鸟一枚,如有问题欢迎大家在评论区指出,我们一起学习。
1.2.1:数据类型
Java的数据类型分为两大类:
基本数据类型:包括 整数
、浮点数
、字符
、布尔
。 其中整数包含字节型(byte),短整型(short),整型(int),长整型(long);浮点数中包含单精度(float)和双精度(double)。
引用数据类型**:包括数组
、 类
、接口
、枚举
、注解
。
在基本数据类型中,每一种数据类型都有其表示范围。
以byte为例,byte占1个字节,占8位,其中首位为符号位(符号位0正1负),则剩下7位位数据位。则可以存储正负2的7次方位数。比较特殊的是0 0000000为十进制0,1 0000000为10进制-128。
1.2.2:类型转换
类型转换分为强制类型转换和自动类型转换。
自动类型转换:小的数据类型赋值给大的数据类型或者与大的数据类型进行运算就会转换为大的数据类型。坑:当byte,short,char数据类型进行算术运算时,按照int类型处理。
byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//编译报错,b1 + b2自动升级为int
char c1 = '0';
char c2 = 'A';
System.out.println(c1 + c2);//113
强制类型转换:转换格式: 数据类型 变量名 = (数据类型)被强转数据值;
int i = 1;
int j = 2;
double shang = (double)i/j;//结果是0.5
int i = (int)3.14;//强制类型转换,损失精度
double d = 1.2;
int num = (int)d;//损失精度
int i = 200;
byte b = (byte)i;//溢出
基本数据类型与字符串之间的转换:
1、任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型(+可以不为算术运算符)
System.out.println("" + 1 + 2);//12 1 和 2全部变成了字符串
2、但是String类型不能通过强制类型()转换,转为其他的类型
1.2.3:运算符
分类 | 运算符 |
---|---|
算术运算符(7个) | +、-、*、/、%、++、-- |
赋值运算符(12个) | =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=等 |
关系运算符(6个) | >、>=、<、<=、==、!= |
逻辑运算符(6个) | &、|、^、!、&&、|| |
条件运算符(2个) | (条件表达式)?结果1:结果2 |
位运算符(7个) | &、|、^、~、<<、>>、>>> |
Lambda运算符(1个) | -> |
算数运算符中,求余运算,余数的符号只看被除数。
System.out.println(5%2);//1
System.out.println(5%-2);//1
System.out.println(-5%2);//-1
System.out.println(-5%-2);//-1
关系运算符中,i++和++i有区别,前者先用再加,后者先加后用。
int i = 1;
int j = i++ + ++i * i++;
/*
从左往右加载
(1)先算i++
①取i的值“1”放操作数栈
②i再自增 i=2
(2)再算++i
①i先自增 i=3
②再取i的值“3”放操作数栈
(3)再算i++
①取i的值“3”放操作数栈
②i再自增 i=4
(4)先算乘法
用操作数栈中3 * 3 = 9,并把9压会操作数栈
(5)再算求和
用操作数栈中的 1 + 9 = 10
(6)最后算赋值
j = 10
*/
位运算符:位运算符都是以补码进行运算的。
位运算符 | 符号解释 |
---|---|
& | 按位与,当两位相同时为1时才返回1 |
| | 按位或,只要有一位为1即可返回1 |
~ | 按位非,将操作数的每个位(包括符号位)全部取反 |
^ | 按位异或。当两位相同时返回0,不同时返回1 |
<< | 左移运算符 |
>> | 右移运算符 |
>>> | 无符号右移运算符 |
原码:最高位0正1负
反码:正数与原码相同。负数最高位不变,后面按位取反。
补码:正数与原码相同。负数反码加一
运算符的优先级: