30天速成Java-Day03

218 阅读6分钟

30天速成Java-Day03

只要是石头,

到哪里都不会发光的。

String类型变量的使用

  1. String不是基础数据类型,属于引用数据类型。
  2. 声明String类型变量时,使用一堆双引号声明("")。注意char类型使用的是单引号('')。
  3. 使用方式与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。

运算符

运算符是一种特殊的符号,用以表示数据的运算,赋值,比较大小等。

算术运算符

  1. (正号)+
  2. (负号)-
  3. (加)+
  4. (减)-
  5. (乘)*
  6. (除)/
//除号:/
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
  1. (取模)%

结果的符号与被模数的符号相同,在日常开发中,经常用%来判断是否能够被除尽的情况

//取模(取余)%
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. (前)++
//前++ 后++ 表示目标变量自增1
int num11 = 10, num12 = ++num11;
System.out.println("num11 = " + num11 +" "+ "num12 = " + num12);//先加再用 11
  1. (后)++
//前++ 后++ 表示目标变量自增1
int num13 = 10, num14 = num13++;
System.out.println("num13 = " + num13 +" "+"num14 = " + num14);//先用再加 10
  1. (前)--
//前-- 后-- 表示目标变量自减1
int num15 = 10, num16 = --num15;
System.out.println("num15 = " + num15 + " " + "num16 = " + num16);//先减再用 9
  1. (后)--
int num17 = 10, num18 = num17--;
System.out.println("num17 = " + num17 + " " + "num18 = " + num18);//先用再减 10
  1. (拼接)+

赋值运算符

  1. =
    当【=】号两侧数据类型不一致的时候,可以使用自动类型转换或者强制类型转换进行处理
public class SetValueTest {
    public static void main(String[] args) {
//        赋值符号:=
        int num1 = 10, num2 = 2;

        //连续赋值
        int num3, num4;
        num3 = num4 = 6;
    }
}
  1. +=
int a = 10;
a += 2;//a=a+2
System.out.println(a);//12
  1. -=
int b = 23;
b -= 6;
System.out.println(b);//17
  1. *=
int c = 23;
c *= 6;
System.out.println(c);//138
  1. /=
int d = 23;
d /= 6;
System.out.println(d);//3
  1. %=
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

    }
}
  1. (==) 相等
  2. (!=)不等
  3. (<)小于
  4. (>)大于
  5. (<=)小于等于
  6. (>=)大于等于

逻辑运算符

逻辑运算符操作的是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);

运算符的优先级

  1. 运算符有不同的优先级,所谓优先级就是表达运算中的运算顺序
  2. 只有单目运算符、三元运算符、赋值运算符是从右向左运算的,如图。

运算符的优先级.png 该图来源:Java运算符优先级 (biancheng.net)