Java拾贝第二天——数据类型与运算符杂记

发布时间 2023-10-15 15:46:37作者: ocraft

众所周知任何数据类型都可以向String转型

public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println("1+2=" + a + b);
    }
//1+2=12

由于输出语句中碰到了字符串,此时的+被视为字符串连接的含义所以会导致输出错误

想要使输出结果正确用括号即可,即输出时先计算a+b的值

System.out.println("1+2="+(a + b));
//1+2=3

数据类型的强转

其格式为

(数据类型)变量;

也称之为显式转换。
要注意的是这种转型可能会丢失精确度所以Java不会自动做这些数据类型的转换,所以称之为强制转换。
下面为浮点型强制转型为整型。

public static void main(String[] args) {
        float a=30.1F;
        System.out.println( (int) a);
    }
//30

括号运算符

运算符 描述
() 提高运算优先级

同数学意义上的括号类似。

一元运算符

运算符 描述
-
!
+
public static void main(String[] args) {
        int a = 10;
        int b = -20;
        boolean c = true;

        System.out.println(+a);
        System.out.println(-a);

        System.out.println(+b);
        System.out.println(-b);

        System.out.println(c);
        System.out.println(!c);
    }
/*
10
-10
-20
20
true
false
*/

值得注意的是为什么+b输出是-20 而-b输出却是20呢?
我个人理解的相对于数值类型来说 +表示的是其本身。
而-表示的是其取反,与布尔类型的!是取反相似。

算术运算符

运算符 描述
+
-
*
/
% 取余

关系运算符

运算符 描述
> 大于
< 小于
>= 大于等于
<= 小于等于
== 相等
!= 不相等

一般关系运算符在if语句中使用较多

if (布尔表达式){
//语句;
};

其中,一个数学意义上完整并结果具有布尔值(true/false)的式子称之为布尔表达式

public static void main(String[] args) {
        int a=1;
        int b=2;
        if (a==2){
            System.out.println("不相等,这条语句不会输出");
        }
    }

自增自减

五星⭐⭐⭐⭐⭐警告非常重要

运算符 描述
++ 自增
-- 自减
a=a+1;
a++;
//在逻辑意义上 这两条语句是类似的

自增自减的放置顺序不同也会导致结果的不同

 public static void main(String[] args) {
        int a=1;
        System.out.println(a++);//执行完这条语句后再+1
        System.out.println(a);
    }
/*
1
2
*/

//============================================================================
public static void main(String[] args) {
        int a=1;
        System.out.println(++a);//先+1再执行这条语句
    }
//2

自减与自增相同不再叙述

a--;
先执行语句再自减
--a;
先自减再执行语句

逻辑运算符

运算符 描述
%
%% 短路与
|
|| 短路或
!

!属于一元还是逻辑我也搞不清....哎,搜了一下都包括它
Java开发实战经典(李兴华版)上的逻辑运算符不包括! 如其他书籍有注明请评论解惑!谢谢

//一般来说逻辑运算符涉及到2个布尔表达式
布尔表达式1 && 布尔表达式2

举栗

public static void main(String[] args) {
        int a = 1;
        int b = 2;
        if (a==1 & b==2) {
            System.out.println("两个结果都为真,&&才是真");
        }
    }
//============================================================================
public static void main(String[] args) {
        int a = 1;
        int b = 2;
        if (a==1 | b==3) {
            System.out.println("一个为真,||就是真");
        }
    }
//============================================================================
public static void main(String[] args) {
        int a = 1;
        if (a!=2) {
            System.out.println("不等于就是真");
        }
    }

/*
建议涉及多个布尔表达式的时候用括号概括,即:
(布尔表达式1) && (布尔表达式2)
*/

短路是某个意义上的优化,不废话直接上栗子

//众所周知除0会报错。
public static void main(String[] args) {
        int a = 1;
        System.out.println(1/0);
    }
//Exception in thread "main" java.lang.ArithmeticException: / by zero

//使用与,&
public static void main(String[] args) {
        int a = 1;
        if (a==1 & (1/0==0)){
            System.out.println("使用正常的与");
        }
    }
//Exception in thread "main" java.lang.ArithmeticException: / by zero

//使用短路与,&&
public static void main(String[] args) {
        if (2!=2&&1/0==0){
            System.out.println("使用短路与");
        }
    }
//这里没用报除0错误

短路与,检测到布尔表达式1为false所以不再进行后续的判断

对于&(与)来说,要求所有的布尔表达式都去判断布尔值。如果使用%%(短路与),布尔表达式1为false就不再进行后续的判断。
对于|(或)来说,要求所有的布尔表达式都去判断z布尔值。如果使用||(短路或),布尔表达式1为true就不再进行后续的判断。

三目运算符

布尔表达式?取真值的结果:取假值的结果;

public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int max = a > b ? a : b;
        System.out.println(max);
    }
//也可也写为
public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a > b ? a : b);
    }

要注意的是但三目运算符不能单独出现,必须用变量接收或直接打印

public static void main(String[] args) {
        int a = 1;
        int b = 2;
        a > b ? a : b;
    }
//报错 三目运算符单独出现不能作为合法的Java语句

//============================================================================

//三目运算符其实是if
public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int max=0;

        if (a > b) {
             max = a;
        } else {
             max = b;
        }
        System.out.println(max);
    }
//上述代码等价于
public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int max = a > b ? a : b;
        System.out.println(max);
    }