一.数据类型
1.1 本质
数据存储形式,存储空间大小
1.2 存储
整数存储:
1.3 分类
-
基本数据类型
数值型
整型
byte 字节 8bit -128~127
short 短整型 16bit -32768~32767
int 整型 32bit -2,147,483,648~2,147,483,647
long 长整型 64bit
浮点型
float 单浮点 32bit
double 双浮点 64bit
字符型
char 字符 16bit 0~65535
布尔型
boolean 布尔 8bit 00000001 true 00000000 false
-
引用数据类型
类,数组,接口
整数默认为int类型 小数默认为double类型 引用类型默认值为null,null不能打印
1.4 类型使用
1.4.1 整形
1.4.2 浮点型
float 32位
double 64位
1.4.3 字符型
使用ACSII码转换,支持unicode编码
1.4.4 转义符
转义符 \ 有意义字符转换为无意义字符
\n 换行
1.4.5 布尔型
布尔型只有ture和false两个
一般用于流程控制 占用1字节,1表示true,0表示false
1.5 类型转化
自动类型转换:低精度到高精度为自动类型转换
强制类型转换:高精度到低精度为强制类型转换(去掉高位,保留低位)
上述图片二进制补码为1000 0010转换为源码为1111 1110值为-126
char转换
二. 变量
2.1 常量
值在生命周期中不可更改
2.2 变量
2.3 变量声明
同作用域变量不能重名
2.4 变量分类
(java中没有全局变量,没有函数,class外不允许写东西)
局部变量:方法中创建的变量(局部变量具有临时性.方法执行结束就消失了,并且只能在当前方法中使用,通过变量名直接使用)
静态变量:在类体中(方法外)使用static创建的变量
成员变量:在类体中(方法外)没有使用static创建的变量
全局:(会导致命名冲突问题)没有任何二次引用(使用.操作符),可以直接访问的变量(c++中类外为全局,类内为非全局)Java中不允许在类外写东西,java已经进行模块化封装,摒弃了全局的概念,所以在java中也不允许执行访问某个变量或方法。
使用.操作符可以更好地寻找变量。
2.5 变量调用
局部变量:局部变量具有临时性.方法执行结束就消失了,并且只能在当前方法中使用,通过变量名直接使用
静态变量:类级别,通过类名.静态变量名使用,如果在当前类中使用当前类的静态变量,类名可以省略
成员变量:对象级别,通过对象.成员变量名调用,在成员方法中可以直接使用变量名调用
2.6 变量调用优先级
2.7默认值
局部变量没有默认值
静态变量和成员变量有默认值
三.运算符
3.1 算数运算
算数运算符: + - * / % ++ --
除法中如果是整数,只要商不要余数.(10/3=3)
优先级:从左到右
/ * % 大于 + -,都是左结合
小数加减不要判断相等
++ --属于一元运算,优先级大于* / % + -
++自身加1,会发生赋值. i++等同于i = i + 1
i++ 和 ++i区别 :
i++ 先初始化赋值,再自身+1
++i 先自身+1,再初始化赋值
3.2 混合运算
当进行多类型混合运算时,结果是参与运算的最大类型.
当只有byte short int char 四种类型中任意一种或多种进行运算,结果一定是int类型.
3.3 关系运算
结果一定是布尔型
< <= > >= == !=
3.4 位运算/逻辑运算
逻辑运算结果都为布尔型
& 位与,两边都为true,结果就是true
| 位或,一边为true,结果就是true
! 位非,取反,true就是false,false就是true(一元运算)
&& 短路与,两边都为true,结果就是true,如果第一个条件为false,则第二个条件不再执行
|| 短路或,一边为true,结果就是true,如果第一个条件为true,则第二个条件不再执行
^ 位异或,两边不一样,结果就是true
当&&和||同时出现时,&&的优先级大于||
3.5 位运算进阶
-
&也支持两边是数字,计算是转换为二进制进行每位比较,都是1取1,否则取0
运算结果一定不会超过两个数中的最小值.
15&8
15 : 0000 1111 8: 0000 1000 &: 0000 1000
- ^也支持两边是数字,转换为二进制进行每位比较,不同取1,相同取0 因此两个相同数进行^,结果为0,并且0和任何数进行^,该数不变
15^8
15:0000 1111 8: 0000 1000 ^: 0000 0111
-
~按位非,转换二进制,1变0,0变1(符号位也会变)直接修改内存,内存中存储的是补码.
~12
0000 1100 1111 0011补码 1111 0010 反码 1000 1101 源码
-
>>:右移运算(考虑符号位,符号位不受影响) 10 >>1,右移1次,会把最右边的一个删除,在最左边补0(负数补1) 右移1次,相当于该数/2
-
>>>:右移运算(不考虑符号位),只补0,不补1
System.out.println(10 >>> 2);
10: 1000 0000 0000 0000 0000 0000 0000 1010
1111 1111 1111 1111 1111 1111 1111 0101
// 001111 1111 1111 1111 1111 1111 1111 01
System.out.println(-10 >>> 2);
System.out.println(0b00111111111111111111111111111101);
-
<< : 左移运算,只补0, 不补1 左移1次,相当于该数*2
3.6 赋值运算
右结合,当运算中出现多个赋值运算,则从右到左计算
= 把右边的,赋值给左边,如果右边是个运算,则把运算计算完,把结果赋值给左边
+= -= *= /= %=(会进行隐式的类型转换)
-=:左边减去右边,结果赋值给左边,a-= b;等价于a = a - b(有时需要强制类型转化);
byte+byte结果应该为int类型所以 x = x + y会报错
a=5 a=a+=a 5=5+=5 = 50
标签:1111,java,运算,++,day02,学习,0000,true,变量 From: https://blog.csdn.net/Hunshangmeng/article/details/140558862