变量和运算符
变量和运算符
1、数据类型
四类八种
| 数据类型 | 占用内存 | 取值范围 |
|---|---|---|
| byte | 1个字节 | -2^7 ~ 2^7-1 |
| short | 2个字节 | -2^15 ~ 2^15-1 |
| int | 4个字节 | -2^31 ~ 2^31-1 |
| long | 8个字节 | -2^63 ~ 2^63-1 |
| float | 4个字节 | (正数)1.4E-45 - 3.4028235E38 (整体) -3.4028235E38 ~ 3.4028235E38 |
| double | 8个字节 | 1.7976931348623157E308 ~ 4.9E-324 |
| char | 2个字节 | 65536(看字符编码) |
| boolean | 1个字节 | 两个值 true和false |
定义变量的规则
- 变量名字里不能有空格。
- 避免使用关键字,class public int static
- 避免使用汉字,不要使用英文和拼音混着写
- 整体是驼峰命名,首字母小写 lowerCamelCase
- $和_可以到处使用,但是不建议当做开头
- 数字不能开头
基础数据类型的运算
#(1)算术运算符
+ - * / % ++ --
i++,--i 其实相当于 i = i+1;
int num1 = 12;
++num1;
System.out.println(num1);
结果是13
int num1 = 12;
num1++;
System.out.println(num1);
结果是13
int num1 = 12;
int num2 = num1++;
System.out.println(num2);
结果是:12
先赋值后计算
int num1 = 12;
int num2 = ++num1;
System.out.println(num2);
结果是:13
先计算后赋值
看看以下的代码:
byte num1 = 12;
long num2 = 13;
long num3 = num1 + num2;
int num1 = 12;
int num2 = 13;
int num3 = num1 + num2;
System.out.println(num3);
结论:
算术运算符,int以下的做运算,结果都是int类型,long和其他的类型做运算,结果是long。
++i 和 i++的区别
如果不赋值都是自增1
如果赋值,i++ 是 先把i赋值给其他变量,然后自增, ++i是先赋值再自增。
逻辑运算符-真值表
逻辑运算的结果是布尔型 boolean 与 或 非
与
| 条件1 condition1 | 条件2 condition2 | 结果 |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
或
| 条件1 condition1 | 条件2 condition2 | 结果 |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
非
| 条件1 condition1 | 结果 |
|---|---|
| true | false |
| false | true |
符号表示
& | ! && ||
boolean flag1 = true;
boolean flag2 = false;
boolean flag3 = flag1 & flag2;
boolean flag4 = flag1 | flag2;
boolean flag5 = !flag1;
int num1 = 12;
int num2 = 15;
boolean flag6 = num1 >= num2;
boolean flag7 = num1 == num2;
boolean flag8 = (num1 >= num2) & (num1 == num2);
System.out.println(flag8);
短路运算符
&& 短路运算符 如果短路运算的结果是false,那么结果直接就是false, 不会继续运算后边的逻辑
|| 短路运算符 如果短路运算的结果是true,那么结果直接就是true, 不会继续运算后边的逻辑
看看以下代码:
byte num1 = 12;
byte num2 = 13;
byte num3 = num1 & num2;
byte num1 = 12;
long num2 = 13;
long num3 = num1 & num2;
char c1 = '1';
char c2 = '2';
char c3 = c1 & c1;
System.out.println('a');
System.out.println('a'+'b');
亦或
^ 相同为零 不同为1
#(3)赋值运算符号
+= -= *= /= =
i += 5 相当与 i = i + 5;
#(4)三目运算符
条件 ? 结果1 : 结果2;
条件的结果一定是boolean ,只能是true或者false;
条件是可以复杂的
boolean condition1 = 5 > 3;
boolean condition2 = 5 > 3;
boolean condition3 = 5 > 3;
int num = (condition1 && (condition2 || condition3)) ? 1 : 2;
#(6)位移运算符
| 符号 | 说明 |
|---|---|
| << | 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) |
| >> | "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. |
| >>> | "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负 |
#4、数据类型的转型
int类型的变量转long,怎么转,自动转。
int num1 = 152;
long num2 = num1;
System.out.println(num2);
long类型的变量转int,怎么转,强转。
long num1 = 2345645645645464564L;
int num2 = (int)num1;
System.out.println(num2);
float类型转long
float num1 = 234545654654654564564564.4F;
long num2 = (long)num1;
System.out.println(num2);
long类型转float
long num1 = 2345645645645464564L;
float num2 = num1;
System.out.println(num2);
结论:
任何有精度缺失(有可能让两个数变成完全不一样的两个数)的转型都需要强转,jvm不给你负责。
取值范围大的转取值范围小的自动转,反之需要强转。

浙公网安备 33010602011771号