重温JavaSE03

文章详细介绍了Java中的运算符行为,包括算术运算、赋值运算、关系运算、逻辑运算、条件运算符、位运算符以及运算符的执行顺序。此外,还讨论了变量自增、字符串比较、类型转换规则和选择结构(if,switch)的应用。
摘要由CSDN通过智能技术生成

运算符(理解)

背下面的干货分享

package com.jr.curriculum;

import org.junit.Test;

import java.util.Scanner;

public class Demo {
    @Test
    public void test01(){
        int a = 9;
        int b = a++;//先赋值,再自增
        System.out.println("a="+a+"\tb="+b);
        int c = ++b;//先自增,再赋值
        System.out.println("b="+b+"\tc="+c);
        /*
        【运算符】:模拟生活中的运算。
        1.算术运算符:+ - * / %
            java程序跟生活中的求商求余不一样:
                生活中:5除2 = 2 余 1
                java中:5 / 2 = 2     5 % 2 = 1
            ++ -- 都是变量自身加1/减1
            int a = 9;
            a++; --->a=a+1;
            a--; --->a=a-1;
          面试常考:a++、++a、a--、--a有什么异同
          相同点:都是代表 变量a 自身加/减1
                 当表达式中,只有a++/++a 的时候,结果没区别
          不同点:当表达式中除了a++/++a以外,还有其他功能代码的时候,就有区别了
                 ++在前时,先进行自身的+1,再进行其他功能的操作
                 ++在后时,先进行其他功能的操作,再进行自身的+1
         */
    }
    @Test
    public void test02(){
        int a = 9;
        int b = 9;
        System.out.println(a <= b);//true
        String str = "吉软";//字面常量,放在常量池里(重复值不开辟空间)
        String str1 = "吉软";
        String str2 = new String("吉软");//new出来的,放在堆里(新开辟空间)
        String str3 = new String("吉软");
        System.out.println(str == str1);//true 比的是地址
        System.out.println(str1 == str2);//false
        System.out.println(str2 == str3);//false

        System.out.println("请输入学校姓名");
        Scanner input = new Scanner(System.in);
        String str4 = input.next();//假设输入的是吉软   也是堆里(新开辟空间)
        System.out.println(str == str4);//false
        System.out.println(str2 == str4);//false
        System.out.println(str.equals(str4)?"在同一所学校":"不在同一所学校");//true  三目运算符
        /*
        2.赋值运算符:= += -= *= /=
            int a = 9;
            a += 500; a = a + 500;
        3.关系运算符:> < >= <= == !=
            1)使用关系运算符 比较 数值内容的 大小 以及 是否相等
            2)字符串的比较 是否相同用什么比较?
            【数字之间的 == 是在比较内容/值 是否相同】
            【字符串之间的 == 是在比较内存的空间位置 是否相同】
             ##########常量池规则:相同的值共用<--->堆规则:开辟新空间##########
            【字符串之间的 equals() 是在比较字符串之间的内容】
         4.三目运算符:逻辑表达式?语句1:语句2
            逻辑表达式为真执行语句1,为假执行语句2
         */
    }
    @Test
    public void test03(){
        System.out.println(5 > 3 && 7 < 6 ? true : false);//7<6为假
        System.out.println(5 > 3 & 7 < 6 ? true : false);//7<6为假
        System.out.println(!(5 > 3) ? true : false);//5>3为真,取反为假

        int a = 9;
        if(7 < 6 && (++a) > 9){//根本没执行++a
            System.out.println("条件为真");
        }else {
            System.out.println("条件为假");
        }
        System.out.println("a="+a);
        /*
         5.逻辑运算符:&& &并且  || |或者  !取反 ^异或
            &&和&的异同?
            相同点:都可以进行 表达式的逻辑判断,都代表"并且"的意思(前后表达式同时为真 结果才是真)。
            不同点:
                1) &&、|| 是逻辑运算符
                2) &、|  既是逻辑运算符 又是位运算符
                3) && 是逻辑判断的短路与(前面语句为假,后面不执行)||(前面语句为真,后面不执行)
                   &  不是逻辑判断的短路与(效率低,相对不安全)
         */
    }
    @Test
    public void test04(){
        /*
        6.条件运算符/三目运算符:
            表达式1?表达式2:表达式3
            表达式1:必须是boolean
            表达式2、表达式3 不限定类型,但是必须是相同类型
            使用场合:简写if选择结构
        7.位运算符:& | ^ ~ >> << ...
        8.运算符执行顺序:
                () > 递增递减 > 算数运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符 > 逗号
        9.字符串运算符:
            字符串拼接运算符:当 +加号 左右有一个String类型表达式的时候,+就是字符串拼接。
            算数运算符:当 +加号 左右都是数字类型表达式的时候,+就是算数运算符。
         */
    }
}

其他:(理解)

当表达式中除了a++/++a以外,还有其他功能代码的时候,就有区别了
++在前时,先进行自身的+1,再进行其他功能的操作
++在后时,先进行其他功能的操作,再进行自身的+1

4乘以8最快的方式: 4<<3 这里相当于4乘2的3次幂

当 +加号 左右有一个String类型表达式的时候,+就是字符串拼接。

运算符优先级:赋值<三目<逻辑<关系<算术<单目

其他:(重点)

【数字之间的 == 是在比较内容/值 是否相同】
【字符串之间的 == 是在比较内存的空间位置 是否相同】
常量池规则:相同的值共用

堆规则:开辟新空间

【字符串之间的 equals() 是在比较字符串之间的内容 是否相同】

比较String、Integer、Date的内容是否相同(比对象是地址,可重写比较对象)

&&、|| 是逻辑运算符

&、| 既是逻辑运算符 又是位运算符
&& 是逻辑判断的短路与(前面语句为假,后面不执行)||(前面语句为真,后面不执行)

选择结构:(理解)

背下面的干货分享

@Test
    public void test1(){
        System.out.println("请输入你的成绩");//用switch写区间的条件(比if麻烦)
        Scanner input = new Scanner(System.in);
        int score = input.nextInt();
        switch (score){
            case 100:
            case 99:
            case 98:
            case 97:
            case 96:
            case 95:
            case 94:
            case 93:
            case 92:
            case 91:
            case 90:
                System.out.println("A级");
                break;
            case 89:
//                ....
        }
        /*
        《选择结构》
        1.程序执行顺序分为三种:
            顺序结构:   {} 所有代码都 逐行(一行挨着一行,从上到下,从左到右)执行
            选择结构:   根据判断的结果,    有选择性的选择一部分代码进行执行。
            循环结构:   根据判断的结果,    重复执行 某一部分代码
        2.选择结构:
            java中的选择结构分为两种:
                if选择结构: 单分支 if(boolean表达式){}
                            双分支 if(boolean表达式){
                                   }else{
                                   }
                            多分支 if(boolean表达式){
                                   }else if(boolean表达式){
                                   }else if(boolean表达式){
                                   }else{
                                   }
                            嵌套分支if(boolean表达式){
                                        if(boolean表达式){
                                        }else{
                                        }
                                   }else{
                                   }
                switch选择结构

                int i = 9;
                char c = '鼠'
                String name = "惠常哲";
                    switch(byte short int char String 枚举 表达式){
                        case "7":
                        case "8":
                        case "9":
                                代码
                                break;
                        case "10":
                        default :
                    }
            【if选择结构 和 switch选择结构的异同】
            相同点:两者都可以做 选择分支判断
            不同点:if更擅长做 区间判断
                    switch只能做等值判断
         */
    }

其他(重点)

控制语句分为三类:顺序、选择和循环。

顺序结构:执行顺序是从上到下,从左到右,逐行执行

选择结构:if、switch

switch(表达式) 不能用于double,float类型

只能用于byte short int char String 枚举类型

在JDK1.7之后允许使用字符串(String)

循环结构:(理解)

背下面的干货分享

@Test
    public void test2(){
        //输出10遍今天是星期五
        int i = 1;//循环的开始条件
        while (i <= 10){//循环条件(结束条件)
            System.out.println(i+"今天是星期五");//循环内容
            i ++;//条件修改
        }
        
        i = 1;
        do {//风险:不管如何都执行一遍(例如登录不管密码对不对都进入)
            System.out.println(i);
            i++;
        }while (i <= 10);

        for (i = 1; i <= 10; i++) {
            System.out.println("i"+i);
        }
        /*
        3.循环结构:
            1)Java中的循环结构 4种:    while、do...while、for、增强for=foreach
            		while一般用于循环次数不固定的情况
            2)循环结构根据循环次数可以分为:   固定循环次数  不固定循环次数
            3)所有的循环结构   都是由两部分组成:
                    循环条件:开始条件(循环开始前写)   循环条件(循环结构的小括号里)    条件修改(循环内容的最后一行)
                    循环内容:重复做的内容
         */
    }

其他:(重点)

IDEA快捷键:fori

循环结构有:while、do-while、for、foreach

循环的内部结构:开始条件、循环条件、条件修改、循环内容

面试题(重点)

8种基本数据类型及其字节数
数据类型关键字字节数
数值型整数型byte1
数值型整数型short2
数值型整数型int4
数值型整数型long8
数值型浮点型float4
数值型浮点型double8
布尔型boolean1**(位)**
字符型char2
i++和++i的共同点:

1、i++和++i都是变量自增1,都等价于i=i+1

2、如果i++,++i是一条单独的语句,两者没有任何区别

3、i++和++i的使用仅仅针对变量。 5++和++5会报错,因为5不是变量。

i++和++i的不同点:

如果i++,++i不是一条单独的语句,他们就有区别

i++ :先运算后增1。如:

	int x=5;
	int y=x++;
	System.out.println("x="+x+", y="+y);
    //以上代码运行后输出结果为:x=6, y=5

++i : 先增1后运算。如:

	int x=5;
	int y=++x;
	System.out.println("x="+x+", y="+y);
    //以上代码运行后输出结果为:x=6, y=6
&和&&的区别和联系,|和||的区别和联系

&和&&的联系(共同点):

&和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定。

操作数1&操作数2,操作数1&&操作数2,
表达式1&表达式2,表达式1&&表达式2,

情况1:当上述的操作数是boolean类型变量时,&和&&都可以用作逻辑与运算符。

情况2:当上述的表达式结果是boolean类型变量时,&和&&都可以用作逻辑与运算符。

表示逻辑与(and),当运算符两边的表达式的结果或操作数都为true时,整个运算结果才为true,否则,只要有一方为false,结果都为false。

&和&&的区别(不同点):

(1)、&逻辑运算符称为逻辑与运算符,&&逻辑运算符称为短路与运算符,也可叫逻辑与运算符。

对于&:无论任何情况,&两边的操作数或表达式都会参与计算。

对于&&:当&&左边的操作数为false或左边表达式结果为false时,&&右边的操作数或表达式将不参与计算,此时最终结果都为false。

综上所述,如果逻辑与运算的第一个操作数是false或第一个表达式的结果为false时,对于第二个操作数或表达式是否进行运算,对最终的结果没有影响,结果肯定是false。推介平时多使用&&,因为它效率更高些。

(2)、&还可以用作位运算符。当&两边操作数或两边表达式的结果不是boolean类型时,&用于按位与运算符的操作。

|和||的区别和联系与&和&&的区别和联系类似

用最有效率的方法算出2乘以8等于多少

使用位运算来实现效率最高。位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。对于位运算符“<<”, 是将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,位运算cpu直接支持的,效率最高。所以,2乘以8等于几的最效率的方法是2 << 3。

基本数据类型的类型转换规则

基本类型转换分为自动转换和强制转换。

自动转换规则:容量小的数据类型可以自动转换成容量大的数据类型,也可以说低级自动向高级转换。这儿的容量指的不是字节数,而是指类型表述的范围。
在这里插入图片描述
*强制转换规则:*高级变为低级需要强制转换。

如何转换:

(1)、赋值运算符“=”右边的转换,先自动转换成表达式中级别最高的数据类型,再进行运算。

(2)、赋值运算符“=”两侧的转换,若左边级别>右边级别,会自动转换;若左边级别 == 右边级别,不用转换;若左边级别 < 右边级别,需强制转换。

(3)、可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,前提是不超出其表述范围,否则必须进行强制转换。

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值