- 定义/声明变量
- 先声明再使用
- 变量只能在自己的生命周期内使用
- 生命周期范围:{} 之间
int a;a = 1; // int a = 1;
4. 数据类型
- 数据类型的分类
- 变量作用范围分类:
- 全局变量
- 局部变量
- 按数据类型分类
- 基本数据类型(一个变量在其生命周期内仅代表一个值)
- 引用数据类型
- 变量作用范围分类:
- 基本数据类型
- 6种数字类型
- 4种整数型:byte、short、int、long
- 2种浮点型:float、double
- 1种字符类型:char
- 1种布尔型:boolean
- 6种数字类型
- 基本数据类型详解
基本类型 | 存储大小 | 初始化默认值 | 取值范围 |
byte | 1字节(8位) | 0 | -128~127 |
short | 2字节 | 0 | -32768~32767 |
int | 4字节 | 0 | -2^31 ~ 2^31 - 1 |
long | 8字节 | 0L | -2^63 ~ 2^63 - 1 |
float | 4字节 | 0.0f | 符合IEEE754标准的浮点数,1.4E-45 ~ 3.4028235E38 |
double | 8字节 | 0.0d | 符合IEEE754标准的浮点数,4.9E-324 ~ 1.7976931348623157E308 |
char | 2字节 | '\u0000' | \u0000 ~ \uffff(十进制等效值为 0~65535,本质也是数值) |
boolean | 1字节/4字节 | false | true/false |
float类型的数据在声明时一定要加上F/f
float f = 1.0f; //f=1.0
基本数据类型的取值范围可以查询对应包装类的常量
//int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
- 基本数据类型与引用数据类型的区别
- 存储方式:基本数据类型直接存储值,引用数据类型存储的是对象的引用(内存地址)
- 内存分配:基本数据类型在栈上分配内存,引用数据类型在堆上分配内存(具体内容存放在堆中,栈中存放的是其具体内容所在内存的地址)。栈上的分配速度较快,但是内存空间较小,而堆上的分配速度较慢,但可以分配更大的内存空间
- 默认值:基本数据类型会有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而引用数据类型的默认值是null,表示没有引用指向任何对象
- 复制操作:基本数据类型进行复制时,会复制该变量的值。而引用数据类型进行复制时,只会复制对象的引用,两个变量指向同一个对象
- 参数传递:基本数据类型作为方法的参数传递时,传递的是值的副本,不会修改原始值。而引用数据类型作为方法的参数传递时,传递的是对象的引用,可以修改对象的属性或状态
- 比较操作:基本数据类型使用\==进行比较时,比较的是值是否相等。而引用数据类型使用\==进行比较时,比较的是引用是否指向同一个对象,如果要比较对象的内容是否相同,需要使用equals()方法
注意:Java中的包装类(Wrapper Classes)对基本数据类型进行了封装,使其也具有了对象的特性,可以调用方法和进行类型转换等操作。
5. 进制
- 二进制(0~1):在Java中以0b开头
int i = 0b10; // 二进制10 = 2
- 八进制(0~7):在Java中以0开头
int i = 010; // 八进制10=8
- 十进制(0~9):人类使用的算数进制
- 十六进制(0~9、A~F):在Java中以0x开头
int i = 0x1A; // 十六进制1A=26
- 进制转换:
- 借助十进制转换
- 2进制直接转 八进制/ 十六进制
6. String类型
String str = "Hello World!";
7. 类型转换
自动类型转换(数据类型小转大)
- 数据运算
byte a = 10;
int b = 20;
long c = a * b;
System.out.println("c=" + c); //200
- 赋值
byte a = 10;
int b = a;
System.out.println("b=" + b); //10
- 自动类型转换顺序
double>float>long>int>short>byte
double>float>long>int>char
强制类型转换(强制类型转换有风险)
char c = 'a';
int c1 = (int)c;//c变量对应的值会自动的转为int类型,然后进行计算 c1=97
8. 运算符
- 计算机在运算时使用的符号
计算机在运算时只有加法,借助补码进行展示
1+(-1)
原码:1 ---》 0000 0001
-1 ---》 1000 0001
-----------------
1000 0010
反码:
正数:原码
负数:数字位上的数字取反
1 ---》 0000 0001
-1 ---》 1111 1110
------------------
1111 1111
补码:(通过补码进行数字展示)
正数:反码
负数:数字位上的数字取反,运算的和+1
1 ---》 0000 0001
-1 ---》 1111 1110
------------------
0000 0000
8.1 算术运算符
- 计算表达式 a++ + ++a + a++ + a++ - ++a + a++ - a++的值:4
2 3 4 5 6 7
a++ + ++a + a++ + a++ - ++a + a++ - a++
1 3 3 4 6 6 7
8.2 赋值运算符
=、+=、-=、*=、/=、%=
8.3 比较运算符
8.4 逻辑运算符
// & 就是和的意思 ----只要有一个结果为假,整体结果为假
// | 就是或 的意思-----只要有一个为真,整体结果为真
// ^ 异或 ----- 相同为假 不同为真
//! 逻辑非
8.5 位运算符
&: 按位与
|:按位或
^:按位异或
<<:左移*位
>>:右移*位
>>>:无符号右移*位
/位运算符 1代表真 0 代表假
// 4---->0000 0100
// 3---->0000 0011
//-------------------
System.out.println(4&3);//0
System.out.println(4|3);//7
System.out.println(4^3);//7
// 数字 << 移动的位数 数字变大 左位移符号
// 这个二进制数是正数 ---在尾部进行补0
// 这个二进制数是负数 ---在尾部进行补1
System.out.println(4<<3);//8
// 数字 >> 移动的位数 数字变小 右位移符号
// 这个二进制数是正数 ---在前面进行补0
// 这个二进制数是负数 ---在前面进行补1
System.out.println(-4>>1);
// 数字 >>> 移到的位数 数字变小 右位移符号 这个二进制数无论是正还是负 都在前面补0
System.out.println(-4>>>1);
}
& 和 &&(短路与)的区别
1.&是按位与,&&是逻辑与
- &:a&b是把a和b都转换成二进制数然后再进行与的运算;
- &&:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。
2.同为逻辑与时
- &:对前后都进行判断;
- &&:只要前面部分是false就输出false,而不继续判断后面了(短路)
8.6 三目运算符
//仅适用代替简单的if else 语句
int age=17;
String s = age >= 18 ? "成年人" : "未成年人";
System.out.println(s);