30天速成Java-Day03
只要是石头,
到哪里都不会发光的。
String类型变量的使用
- String不是基础数据类型,属于引用数据类型。
- 声明String类型变量时,使用一堆双引号声明("")。注意char类型使用的是单引号('')。
- 使用方式与8种基础数据类型(byte、short、char、int、long、float、double、boolean)一致,例如:
String str="xtjj";
4.一个字符串可以串接(字符串拼接)另一个字符串,也可以直接串接其他数据类型。例如:
str = str + "yxlm";
int n = 10;
str = str + 10;
String类型变量练习1
char c='a';
int num=10;
String str="hello";
System.out.println(c+num+str);
System.out.println(num+str+c);
System.out.println(c+(num+str));
System.out.println(c+str+num);
String类型变量练习2
//* *
System.out.println("* *");
System.out.println('*'+'\t'+'*');
System.out.println('*'+"\t"+'*');
System.out.println('*'+'\t'+"*");
System.out.println('*'+('\t'+"*"));
String类型变量练习3
String str1=4;//判断对错
String str2=3.5f+"";//判断对错
System.out.println(str2);//输出
System.out.println(3+4+"Java");//输出
System.out.println('a'+1+"hello?");//输出
System.out.println("hello!"+'a'+1);//输出
String类型变量练习4
// 判断编译是否通过
short s = 5;
s = s + 2;
byte b = 3;
b = b + 4;
b = (byte) (b + 4);
char c1 = 'a';
int i = 5;
float d = .314F;
double result = c1 + i + d;
byte b2 = 5;
short s1 = 3;
short t = b2 + s1;
5.任何数据类型和String类型做运算,其结果都是String。
运算符
运算符是一种特殊的符号,用以表示数据的运算,赋值,比较大小等。
算术运算符
- (正号)+
- (负号)-
- (加)+
- (减)-
- (乘)*
- (除)/
//除号:/
int num1 = 12, num2 = 5;
int result = num1 / num2;
System.out.println(result);//2
double result2 = num1 / num2;
double result3 = (double) num1 / num2;
System.out.println(result2);//2.0
System.out.println(result3);//2.4
- (取模)%
结果的符号与被模数的符号相同,在日常开发中,经常用%来判断是否能够被除尽的情况
//取模(取余)%
int num3 = 15, num4 = 7;
System.out.println("num3 % num4 = " + num3 % num4);
int num5 = -15, num6 = 7;
System.out.println("num5 % num6 = " + num5 % num6);
int num7 = 15, num8 = -7;
System.out.println("num7 % num8 = " + num3 % num8);
int num9 = -15, num10 = -7;
System.out.println("num9 % num10 = " + num3 % num10);
- (前)++
//前++ 后++ 表示目标变量自增1
int num11 = 10, num12 = ++num11;
System.out.println("num11 = " + num11 +" "+ "num12 = " + num12);//先加再用 11
- (后)++
//前++ 后++ 表示目标变量自增1
int num13 = 10, num14 = num13++;
System.out.println("num13 = " + num13 +" "+"num14 = " + num14);//先用再加 10
- (前)--
//前-- 后-- 表示目标变量自减1
int num15 = 10, num16 = --num15;
System.out.println("num15 = " + num15 + " " + "num16 = " + num16);//先减再用 9
- (后)--
int num17 = 10, num18 = num17--;
System.out.println("num17 = " + num17 + " " + "num18 = " + num18);//先用再减 10
- (拼接)+
赋值运算符
- =
当【=】号两侧数据类型不一致的时候,可以使用自动类型转换或者强制类型转换进行处理
public class SetValueTest {
public static void main(String[] args) {
// 赋值符号:=
int num1 = 10, num2 = 2;
//连续赋值
int num3, num4;
num3 = num4 = 6;
}
}
- +=
int a = 10;
a += 2;//a=a+2
System.out.println(a);//12
- -=
int b = 23;
b -= 6;
System.out.println(b);//17
- *=
int c = 23;
c *= 6;
System.out.println(c);//138
- /=
int d = 23;
d /= 6;
System.out.println(d);//3
- %=
int e = 23;
e %= 6;
System.out.println(e);//5
在日常开发中,使一个变量实现+2的操作,有几种方法?
int num = 10;
num = num + 2;//方法一
num += 2;//方法二(不会改变原有的数据类型)
在日常开发中,使一个变量实现+1的操作,有几种方法?
int num = 10;
num = num + 1;//方法一
num += 1;//方法二
num++;//(推荐)
思考题1:
// 1和2有什么区别
short s = 3;
s = s + 2;//1
s += 2;//2
答:1编译通过不了,2可以
思考题2:
int i = 1;
i *= .1;
System.out.println(i);//0
i++;
System.out.println(i);//1
思考题3:
int m = 2, n = 3;
n *= m++;
System.out.println("n = " + n);//6
System.out.println("m = " + m);//3
思考题4:
int a = 10;
a += (a++) + (++a);
System.out.println(a);//32
思考5:
int x = 1, y;
int sum = (y = x++ + --x) + x-- + y++;
System.out.println(sum);//5
比较运算符(关系运算符)
- 比较运算符的结果都是boolean类型,也就是要么是true,要么是false。 - *比较运算符“==”不能误写成“=”*
package com.javalike;
public class CompareTest {
public static void main(String[] args) {
int i = 10, j = 20;
System.out.println(i == 2);//false
System.out.println(i = j);//20
}
}
- (==) 相等
- (!=)不等
- (<)小于
- (>)大于
- (<=)小于等于
- (>=)大于等于
逻辑运算符
逻辑运算符操作的是boolean类型的变量
【&-与】
举个例子: 你想和你女朋友结婚,这时,女方家庭提出:“想娶我女儿?你必须有房有车!否则你休想!”这时这种情况就属于【&-与】。
【|-或】
你想和你女朋友结婚,这时,女方家庭提出:“想娶我女儿?你得有房或者有车!你不会一样都拿不出手吧?怎么给得了我女崽幸福?!!”这时这种情况就属于【&-或】。
【!-非】
有天你女朋友路过一家包包店!明明只是路过,但是她一直看着其中的某一个包。这时,你问她:“是不是很想买这个啊?”她一边拉着你走一边看着那个包说:“不是!绝对不是!”。这时这种情况就属于【&-非】。
【&&-短路与】
package com.javalike;
public class LogicTest {
public static void main(String[] args) {
//区分&和&&
boolean b1 = true;
b1 = false;
int num = 1;
if (b1 & (num++ > 0)) {
System.out.println("我最帅");
} else {
System.out.println("我最美");
}
System.out.println("num = " + num);//2
boolean b2 = true;
b2 = false;
int num2 = 1;
if (b2 && (num2++ > 0)) {
System.out.println("我最帅");
} else {
System.out.println("我最美");
}
System.out.println("num2 = " + num2);//1
}
}
结论:
相同点1:&与&&的运算结果相同。
相同点2:当符号左边是true时,二者都会执行符号右边的运算。
不同点:当符号左边是false时,&继续执行符号右边的运算;&&不再执行符号右边的运算!
开发中,推荐使用&&
【||-短路或】
//区分|和||
boolean b3 = true;
b3 = false;
int num3 = 1;
if (b3 | (num3++ > 0)) {
System.out.println("我最帅");
} else {
System.out.println("我最美");
}
System.out.println("num3 = " + num3);
boolean b4 = true;
b4 = false;
int num4 = 1;
if (b4 || (num4++ > 0)) {
System.out.println("我最帅");
} else {
System.out.println("我最美");
}
System.out.println("num4 = " + num4);
}
结论:
相同点1:|与||的运算结果相同。
相同点2:当符号左边是false时,二者都会执行符号右边的运算。
不同点:当符号左边是true时,|继续执行符号右边的运算;而||不再执行符号右边的运算!
开发中,推荐使用||
【^-逻辑异或】
练习1:
int x = 1, y = 2;
if (x++ == 2 & ++y == 2) {
x = 7;
}
System.out.println("x = " + x + ",y = " + y); //2 3
练习2:
int a = 1, b = 2;
if (a++ == 2 && ++b == 2) {
a = 7;
}
System.out.println("a = " + a + ",b = " + b);//2 2
练习3:
int n = 1, m = 2;
if (n++ == 2 | ++m == 2) {
n = 7;
}
System.out.println("n = " + n + ",m = " + m);//2 3
练习4:
int num = 1, num2 = 2;
if (num++ == 2 || ++num2 == 2) {
num = 7;
}
System.out.println("num = " + num + ",num2 = " + num2);//2 3
练习5:
boolean c = true, v = false;
short z = 42;
if (v == true) ;
if ((z++ == 42) && (v = true)) z++;
if ((c = false)||(++z == 45)) z++;
System.out.println(z);//46
位运算符
位运算符操作的都是直接操作二进制
package com.javalike;
public class BitTest {
public static void main(String[] args) {
int i = 21;
i = -21;
System.out.println("i << 2:" + (i << 2));//-81
System.out.println("i << 3:" + (i << 3));//-168
System.out.println("i << 20:" + (i << 20));//-22020096
}
}
结论:
- 位运算符操作的都是整型的数据
- 【<<】:在一定范围内,每次向左移动一位,就相当于 * 2
- 【>>】:在一定范围内,每次向右移动一位,就相当于 / 2
位运算符的细节
【<<】:空位补0,被移除的高位丢弃,空缺位补0
【>>】:被位移的二进制最高位是0,右移后,空缺位补0
【>>>】:被位移二进制最高位无论是0或者1,空位都有0补(
【&】:二进制进行&运算,只有1&1时结果是1,否则是0
【|】:二进制进行&运算,只有1&1时结果是1,否则是0
【^】相同二进制位进行^运算,结果是0;1^1=0,0^0=0;
不相同二进制位^运算结果都是1。1^0=1,0^1=1
【~】取反,各二进制码按补码个位取反; 负数取反,各二进制码按补码个位取反
练习1: 如何最搞笑的运算2 * 8?
2 << 3;
8 << 1;
练习2:交换两个变量的值
int num1 = 10, num2 = 5;
//临时变量
int temp = num1;
num1 = num2;
num2 = temp;
//使用位运算符
//有局限性,只能适用于数值类型
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
System.out.println("num1 = " + num1 + ",num2 = " + num2);
三元运算符
格式:(条件表达式)?表达式1:表达式2
int max = (num1 > num2) ? num1 : num2;
System.out.println(max);
运算符的优先级
- 运算符有不同的优先级,所谓优先级就是表达运算中的运算顺序
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的,如图。