java学习第三天
package operator;
import com.sun.media.jfxmediaimpl.HostUtils;
public class Demo01 {
/**
*
*JAVA 运算符
*
* */
public static void main(String[] args) {
// 二元运算符:加减乘除
//Ctrl + D :复制当前行到下一行
int a = 10;
int b = 20;
int c = 30;
int d = 40;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*c);
System.out.println((double)a/b);//结果可能会有小数,需要把类型进行强转
long a1 = 1234567890L;
int b1 = 1234;
short c1 = 12;
byte d1 = 2;
System.out.println(a1+b1+c1+d1);//结果为long类型,在进行运算时结果会自动转换为运算中最高的类型。
System.out.println(b1+c1+d1);//结果为int 类型
System.out.println(c1+d1);//结果为int类型(特殊情况)
/*在java运算中,在涉及到数据类型范围小于int的(如byte,char,short)时,
数据类型会自动提升为int类型,比如,两个byte类型的数据在进行运算时,运算结果就会变成int类型,
如果要结果是byte类型的话,就要强转成byte类型,这是因为java编译器内部对其进行处理。*/
//关系运算符:正确 错误,布尔值
//一般在判断中会用到:if which
int num1 = 10 ;
int num2 = 20 ;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
//取模 %:取余数
int num3 = 22;
System.out.println(num3/num1);
//一元运算符: ++ -- ,自增 自减;
// 口诀:加号在前先加一,再赋值,加号在后先赋值,再加一。减号在前先减一,再赋值,减号在后先赋值,减加一。
int a2 = 3;
int b2 =a2++;//++放后面,代表先是 a2 的值赋给了 b2, a2 再自增。
//a2 = a2 +1;自上而下
System.out.println(a2);
//4,在这里插入输出语句,是为了检验a2的值在这里进行的改变,其中因此两条运算公式
//a2 = a2 +1;自上而下
int c2 = ++a2;//++放前面,代表先是 a2 自增,a2 的值再给 c2 赋值。
System.out.println(b2);
System.out.println(c2);
//幂运算 2的3次方:2^3 ,在java中是不能这样表示的,一般会使用一些工具类进行操作
double pow = Math.pow(2,3);
System.out.println(pow);
}
}
package operator;
public class Demo02 {
public static void main(String[] args) {
//逻辑运算符
//与 && 或 || 非 (取反)
boolean a = false;
boolean b = true;
System.out.println("a && b:"+ (a&&b));//逻辑 与运算中: 两个变量都为真,结果才为true
System.out.println("a || b:"+ (a||b));//逻辑 或运算中: 两个变量中有一个为真,结果才为true
System.out.println("!(a && b):"+ !(a&&b));//逻辑 非运算中: 如果是真,则变假,如果假则变真
//知识点:短路运算(偷懒运算)
int c =5 ;
boolean d = (c<4)&&(c++<4);
//通过下面输出c的值来看,c++是没有被执行的。
//当然不同情况有不同的答案,
/*
* 节选网络:
* 2、&&和||的短路运算,是指如果在进行前面的表达式的运算过程,通过判断已经明确的知道整个表达式的结果,那么就不会进行后面表达式的运算判断。
* 例如:
* 表达式1 || 表达式2 || 表达式3...|| 表达式n,如果表达式1的运算结果为true,则整个表达式的结果为true,
* 同时不会再对后面的表达式2、表达式3到表达式n进行运算判断。如果表达式1的运算结果为false,则根据表达式2的运算结果继续判断。
*
* 表达式1 && 表达式2 && 表达式3...&& 表达式n,如果表达式1的运算结果为false,则整个表达式的结果为false,
* 同时不会再对后面的表达式2、表达式3到表达式n进行运算判断。如果表达式1的运算结果为true,则根据表达式2的运算结果继续判断。
*
*
* 问题二:&&和||的短路运算有什么用?
* 1、由于&&和||的表达式存在短路运算现象,在短路之后不会对后面的表达式进行运算,所以含有&&和||的表达式最好不要进行变量的赋值和运算操作,可以先计算好每个表达式的结果,直接拿结果进行&&和||的运算。
* 在代码编写的时候就要注意这一点,以防由于&&和||的短路运算导致写出来的代码运算结果与预期的不同。
* 2、把能快速确定整个表达式结果true或false的表达式放在前面,这样由于短路运算后面的表达式可能不会被运算到,节省处理器的运算时间。
*
*
*
*
* */
System.out.println(d);
System.out.println(c);
//位运算(一般很少用到,了解就行)
/*
*
* A = 0011 1100
* B = 0000 1101
* ---------------------------
* & | ^ ~ :与 或 非 取反
*
* A&B: 0000 1100 (相同取相同,不相同取0)
* A|B: 0011 1101 (相同取相同,不相同取1)
* A^B: 0011 0001 (相同取0,不相同取1)
* ~B: 1111 0010 (相反)
*
* 面试题: 2*8 最快算法 (一般算法写的比较麻烦)
* 使用移位符,记住左移等于成2,右移等于除2。
* << : 相当于 *2
* >> : 相当于 /2
*
* System.out.println(3<<3);
* 说明:上面解读为 3*2*2*2
*
*
* */
}
}
package operator;
public class Demo03 {
public static void main(String[] args) {
int a = 10;
int b = 10;
a+=b; //a=a+b
//字符串连接符 + ,
System.out.println(a+b);//结果很容易得出 30
System.out.println(""+a+b);//但是在前面加上字符串符号的话,结果是什么?
//拓展:把字符串号放在二元运算后面,结果又会是什么?
System.out.println(a+b+"");
/*
* 先说结果是:1020,30。
* 解释:其实java运算符的计算顺序是从左往右的,因此在二元运算的前面的是字串符号,所以计算得到的结果就是字串符1020。
* 同理,下面的拓展题二元运算在前,所以结果是30。
*
* */
//三元运算
// x ? y : z
// 通过x来判断,如果x==true ,则结果为y ,否则结果为z
int x = 77;
String Type = x <60 ? "不及格":"及格";
System.out.println(Type);
//优先级 :(),课后动动手
int a1 = 10;
int b2 = 20;
int c1 = 30;
//看下是先乘,还是先加,结果明显是先算括号内,再算括号外。
System.out.println(c1*(a1+b2));
}
}