课前小例
package com.zpwd.chapter1;
public class HelloWord {
public static void main(String[] args) {
// 整型
// System.out.println(num1);//该行为错误写法
int num1 = 10;
// boolean num1= true; //该行为错误写法
boolean num2 = true;
System.out.println(num1+','+num2 )
}
}
在方法中声明的变量成为局部变量*。
*同一个代码块不能声明名称相同的变量。
*在声明变量之前,不能使用该变量,因为代码是顺序执行的,JVM 在栈内存中找到main栈针时,找不到下方声明的变量(先声明后发现)。
*JVM内存三个重要的区域(共有5个区域):堆内存(heap)、栈内存(stack)、方法区
PS输出1的结果是:10,true。
赋值运算符:= 、+= 、-= 、*= 、/=
package com.zpwd.chapter1;
public class HelloWord {
public static void main(String[] args) {
int num = 10;
num += 10;
System.out.println(num);//结果为:20
}
}
num+=10的效果等同于num = num +10
算数运算符:+ 、- 、* 、/ 、% 、++ 、--
package com.zpwd.chapter1;
public class HelloWord {
public static void main(String[] args) {
System.out.println(5 + 6 + 7); // 结果:18
System.out.println(5 + "6" + 7);// 结果:567
System.out.println(5 + 6 + "7");// 结果:117
System.out.println(5 + 6 + '7');// 结果:66
int v1 = 99;
int v2 = 1;
System.out.println("v1+v2=" + (99 + 1));
System.out.println(v1 + "+" + v2 + "=" + (v1 + v2));
// 整型除以整型,得到的结果还是整型,取整(非四舍五入)
System.out.println(7 / 2);// 结果为:3
System.out.println(7.0 / 2);// 结果为:3.5
System.out.println(7 / 2.0);// 结果为:3.5
// %取余数(模运算),结果的正负只与被除数的正负有关,小数%大数 = 小数
System.out.println(5 % 2);// 结果为:1
System.out.println(-5 % 2);// 结果为:-1
System.out.println(5 % -2);// 结果为:1
System.out.println(-5 % -2);// 结果为:-1
System.out.println(-2 % -5);// 结果为:-2
// ++,--:自增,自减(变量 在原有的赋值上加一或者减一)
int i = 0;
i++;
System.out.println(i);// 结果为:1 一般在循环中使用
// ++在前,先自增再运算;++在后,先自增再运算
int a = 1;
int b = ++a;
System.out.println(b);// 结果为2,a先自增变为2,再赋值给b
int c = a++;
System.out.println(c);// 结果为1,先将a的值1赋值给c,a再自增
// 运行Java代码的时候,电脑会先运行JVM,Java虚拟机将.java文件、编译成.class文件
// 栈内存:存放程序运行时所需的局部变量
// 下列代码较为特殊,代码在执行时,JVM找到该条main栈针,内存会开辟一个临时空间,
// 将x变量复制出一份,放在临时空间中,并进行自增操作,但原有的x值不变。程序执行
// 完毕后,临时空间被自动回收。因此输出的x值并没有改变。(面试题经常出现)
int x = 1;
x = x++;
x = x++;
System.out.println(x);// 结果为1。
}
}
!!注意以下几点:
1、算数运算符+有点小特殊,既可以表示两个数相加,又可以表示字符串的拼接,当+两边是数字时,表示相加;当两边是字符串时,表示拼接,既有字符串又有数字时还是起到拼接作用。
2、两个整数相除时,得到的结果是取整(非四舍五入)。
3、两个数取模时,模的正负只与被除数有关;若小数%大数,得到的结果被除数(例:-4%5=-4)。
4、在做自增或自减运算时,运算符(++、--)在前面就表示先自增或自减再进行其他处理;若运算符(++、--)在后面时,则先做其他的再做自增或自减。
比较运算符:> 、 < 、== 、!=
package com.zpwd.chapter1;
public class HelloWord {
public static void main(String[] args) {
int age = 22;
if (age > 18) {
System.out.println("成年人");
}
if (age < 18) {
System.out.println("未年人");
}
if (age == 18) {
System.out.println("18");
}
if (age != 18) {
System.out.println("非18");
}
}
}
结果为:成年人 非18
逻辑运算符 :&& 、|| 、!
package com.zpwd.chapter1;
public class HelloWord {
public static void main(String[] args) {
int age = 22;
double height = 1.99;
if (age > 18 && height > 1.8) {
System.out.println("大于18岁且高于一米八");
}
if (age > 18 || height < 1.8) {
System.out.println("大于18岁或高于一米八");
}
if (!(age > 18)) {
System.out.println("不大于18岁");
}
}
}
结果为:大于18岁且高于一米八
位运算符 :& 、| 、^ 、~ 、>> 、<< 、>>>
package com.zpwd.chapter1;
public class HelloWord {
public static void main(String[] args) {
int age = 22;
// &,参加运算时,两位都为1才为1,否则都为0
System.out.println(6 & 5);// 结果为:4
//6的二进制 110,5的二进制101。结果为:100 ,100的十进制为4
System.out.println(3 & 5);// 结果为:1
// |,参加运算时,只有两位都为0才为0,否则都为1。
System.out.println(5 | 6);// 结果为:7
// ^,亦或:只要参加的运算的两位不同才为1,否则都为0。
System.out.println(5 ^ 6);// 结果为:3
// << :a<<b ,将a的二进制数据左移b位,右边移空的部分补0。
System.out.println(4 << 4); // 结果为:4*(2的4次幂)
}
}
!!位运算只是针对二进制的整数进行运算
条件运算符:判断表达式1 ? 数值1 :数值2
package com.zpwd.chapter1;
public class HelloWord {
public static void main(String[] args) {
int a1 = 10;
int a2 = 4;
int a3 = a1 > a2 ? a1 : a2;
System.out.println(a3);//结果为:10
a3 = 999<1?a1:a2;
System.out.println(a3);//结果为:4
}
}
表达式1中的数值,与?后面的表达式2中的数值没有任何关系。
面试题
1、按位与&,按位| 和逻辑与&&,逻辑或||的异同点。
- 都能进行逻辑判断。
- 按位与&,按位|能参加按位运算。
- 逻辑与&&,逻辑或||具有短路特性。
2、请给出下列的输出结果。
int x = 1;
x = x++;
x = x++;
System.out.println(x) - 结果为:1
3、两个数互换位置(不使用临时变量)
4、如果快速的让2等于8。
2<<2(位运算是二进制运算,计算机本身识别的就是01代码,不需要翻译,直接交给计算机,所以效率最快)