定义变量
变量就是一切通过内存分配并赋值的量,分为不可变变量和可变变量
变:能保存一些可变的量,比如年龄,收入等
便: 方便,一次定义,“到处”(作用域内)使用
(1)过程
-
定义 int i;
-
赋值 i = 5; 定义和赋值可以一起 int i = 5;
-
使用;
(2)定义变量的规则
-
变量名字里不能有空格。
-
避免使用关键字,class public int static
-
避免使用汉字,不要使用英文和拼音混着写
-
整体是驼峰命名,首字母小写 lowerCamelCase
-
$和_可以到处使用,但是不建议当做开头
-
数字不能开头
3、基础数据类型的运算
(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是先赋值再自增。
(2)逻辑运算符-真值表
逻辑运算的结果是布尔型 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不给你负责。
取值范围大的转取值范围小的自动转,反之需要强转。