来自一枚菜鸟的Java学习总结——Java运算符

1、算术运算符

①字符”+“的操作

算术表达式中存在多个不同的基本数据类型的值的时候,整个算术表达式的类型会自动提升

代码测试说明:

public class Demo {
    
    
    public static void main(String[] args){
    
    
        int i = 10;
        char a = 'a';
        int ans = i + a;
        System.out.println("int  " + ans);
        char o = '0';
        double d = i + 3.14159;
        int j = i + o;
        System.out.println("int  " + j);
        System.out.println("double  " + d);
    }
}

测试结果:

int  107
int  58
double  13.14159

提升规则为

a. byte类型、short类型和char类型将直接转换为int类型

b. 整个表达式将自动提升到表达式中最高等级的操作数相同的类型、

等级顺序为:byte、short、char → int → long → float → double

②字符串的”+“操作

a. 当”+“操作中左右为字符串时,操作结果为字符串的拼接

b. 当”+“操作中左右为数字时,操作结果为数字进行加法(我也不知道为什么要写这么一句话)

2、赋值运算符

    x=y;
    一个简单的赋值语句
    "="执行顺序是先执行"="的右边的语句再执行赋值功能(在程序运行阶段)
    其中在执行"="右边的语句时,右边的语句按照从左往右的顺序执行语句
    
    而对于"="两边的内容也有不同的表述和含义
    其中"="左边的被称作左值,右边的被称作为右值
    "="右边的语句通过执行产生一个“值”,再执行"="符号赋值给左边的变量
    其中我们可以确认"="右边即为一个“值”,而"="左边即为一个“容器”
        例如:
           int a = 125;
           int b = 125;
           int c = a + b;
    可以知道a、b、c均是在定义后由系统分配地址和空间产生的“容器”,而"="右边即使一些可以产生“值”的语句

3、自增自减运算符

++i和i++的区别

单独使用都差不多

代码展示

public class Demo {
    
    
    public static void main(String[] args){
    
    
        int ans1 = 1;
        System.out.println("ans1  "+ans1);
        ans1++;
        System.out.println("ans1  "+ ans1);
        int ans2 = 1;
        System.out.println("ans2  "+ans2);
        System.out.println("ans2  "+ ++ans2);
    }
}

输出结果:

ans1  1
ans1  2
ans2  1
ans2  2

对比使用:

a、

代码展示:

public class Demo {
    
    
    public static void main(String[] args){
    
    
       int i = 10;
        System.out.println("i  "+i);
       int j = i++;
        System.out.println("i: "+i);
        System.out.println("j: "+j);
    }
}

输出结果:

i  10
i: 11
j: 10

b、

代码展示:

public class Demo {
    public static void main(String[] args){
       int i = 10;
        System.out.println("i  "+i);
       int j = ++i;
        System.out.println("i: "+i);
        System.out.println("j: "+j);
    }
}

输出结果:

i  10
i: 11
j: 11

也就是说当"++"位于赋值语句中时,其出现在变量前后的位置不同,语句运行结果也不同

当"++"位于变量后方时,即int j = i++;整个语句的执行顺序为先将i的值赋值给j,然后i再进行i++运算,我的理解是先执行i++所在的语句内容,后执行对i变量自加;

当"++"位于变量前方时,即int j = ++i;整个语句的执行顺序为先执行++i语句,然后再将i的值赋值给j。我的理解是先执行对i变量自加,后执行++i所在的语句。

其中在调试的时候出现了一种情况,万幸的是在课堂上老师也提到了

public class demo {
    public static void main(String[] args){
        int ans = 1;
        System.out.println(ans++);//输出的结果是ans=1;
    }
}
   当然通过上述的理论视乎也能解释的通
   下面讲一下课堂上吸收到的思想
    还原函数println();
   假定函数返回值为void
       即:void println(int arg){}
   上述Java代码实际操作为:
       int ans = 1;
       int arg = ans++;
       void println(int arg){}
       System.out.println(ans++);//输出的结果是ans=1;

关于"+=, -=, =, /=,^=…"

注意在有些变量下的语句i+=1;和i=i+1;并不相同

public class Demo {
    public static void main(String[] args){
      byte i = 1;
      i = i + 1;//报错,不兼容的类型,1从int型转换为byte型会丢失精度
      i+=1;//未报错,等价与i = (byte)(i+1),改内容涉及到强制转换,整型常量默认未int型,浮点型常量默认为double型
        System.out.println(i);
    }
}

4、逻辑运算符

逻辑运算符:& | ! && || == != >= <=

其中"&“叫做逻辑与,”&&"叫做短路与

//(语句1 & 语句2)———>boolean值
//逻辑与"&"运算结果为:
//true & true ---> true
//true & false ---> false
//false & true ---> false
//false & false ---> false

//(语句1 && 语句2)———>boolean值
//短路与"&&"运算结果为:
//true && true ---> true
//true && false ---> false
//false && true ---> false
//false && false ---> false

//其中逻辑与"&"和短路与"&&"的区别是:
//逻辑与即使在判断语句的过程中遇到了语句内容产生的值为false,也会将整个"&"存在的语句执行完毕,输出最终值;
//短路与则是在判断语句的值出现false后终止判断语句,输出最终值。
//故在实际操作中短路与使用较多,且在使用短路与的同时应该考虑到将容易产生false的语句放到靠前位置(当然也并非所有情况都是如此,从考虑到程序运行效率和速度的时候可以这样)

还有就是"|“和”||"的区别:

//(语句1 | 语句2)———>boolean值
//"|"运算结果为:
//true | true ---> true
//true | false ---> true
//false | true ---> true
//false | false ---> false

//(语句1 || 语句2)———>boolean值
//"||"运算结果为:
//true | true ---> true
//true | false ---> true
//false | true ---> true
//false | false ---> false

5、三目运算符

表达式1 ? 表达式2 : 表达式3
   例如:int a = 100;
        int b = 200;
        int c = (a > b) ? a : b;


   public class Demo {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = (a > b) ? a : b;
        System.out.println(c);//结果为 200
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45698813/article/details/112944637
今日推荐