Java SE——Java中的运算符

本文详细介绍了Java中的运算符与表达式,包括算术运算符、自增自减、赋值运算符(包括扩展赋值),关系运算符、逻辑运算符(如&&,||,^,!)以及三元运算符。此外,还讲解了隐式转换和强制转换的概念,以及转义字符的使用。

 前言

本博客文章已收录至我的Java SE专栏,如需阅读其他有关博客笔记请转至该专栏下

传送门 -->Java SE_程序员雨空集 

目录

 前言

运算符与表达式

算术运算符

自增自减运算符

赋值运算符

常用赋值运算符:=

拓展赋值运算符:+=、-=、*=、/=、%=

字符串“+”的操作 **

关系运算符

逻辑运算符

& 和 | 的使用

^(异或)的使用:

!(取反)的使用:

短路逻辑运算符

三元运算符

运算符优先级

隐式转换与强制转换

隐式转换

强制转换

*转义字符


 如果你有C语言的基础,本文章的内容会非常好理解

运算符与表达式

运算符:

用于对数据进行算术运算、赋值运算和比较运算的符号

如+ - * =等

表达式:

用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式


算术运算符

数学运算中常见的加减乘除

分类:

+ - * / %
加、减、乘以、除以、取余(取模)

注意:

+(加号)  -(减号)  *(乘号)  这三个跟小学数学中一模一样没有任何区别

  /  整数相除结果只能得到整除的结果,如果结果想要是小数,必须要有小数参数。小数直接参与运算,得到的结果有可能是不精确的。

案例:

int a = 5;
int b = 2;
int result1 = a / b; // 结果为2,整数除法,舍弃小数部分

double c = 5.0;
int d = 2;
double result2 = c / d; // 结果为2.5,浮点数除法,保留小数部分

%:取模、取余% 运算符在Java中用于取模(取余)操作

它执行的是除法运算,但返回的是除法的余数。

示例:

System.out.println(10 % 2); // 0,10除以2的余数为0
System.out.println(10 % 3); // 1,10除以3的余数为1

取模运算可以用于判断一个数是奇数还是偶数:

System.out.println(15 % 2); // 1,15除以2的余数为1,所以15是奇数

通过取模运算,我们可以判断一个数是否能被另一个数整除,或者判断一个数的奇偶性等。


自增自减运算符

自增运算符(++)用于将变量的值增加1,自减运算符(--)用于将变量的值减少1

使用方式:

  • 前置形式:将自增或自减运算符放在变量前面,例如:++a,--a

这会先对变量进行运算,然后再使用变量的值

  • 后置形式:将自增或自减运算符放在变量后面,例如:a++,a--

这会先使用变量的值,然后再对变量进行运算

注意点:

  • 单独写在一行时,前置和后置形式的运算结果是一样的

示例:

int a = 10;
a++; // a的值增加1
System.out.println(a); // 输出11

++a; // a的值再次增加1
System.out.println(a); // 输出12

自增和自减运算符的应用场景:

  • 在某些情况下,需要对变量的值进行加1或减1操作时,可以使用自增或自减运算符
  • 例如,过生日时年龄增加1,购物时选择商品数量,统计满足条件的数据数量等

赋值运算符

常用赋值运算符:=

是最常用的运算符之一,赋值运算符:=

它的作用是将等号右边的结果赋值给等号左边的变量

使用方式:

  • 简单赋值:将一个值或表达式赋给变量

例如:int a = 10; 将10赋值给变量a。

  • 进行计算赋值:将等号右边的表达式计算的结果赋给变量

例如:int c = a + b; 先计算a + b的结果,然后将结果赋值给变量c

特殊用法:

  • 可以将赋值运算符与其他运算符结合使用,例如:a = a + 10; 先计算a + 10的结果,然后将结果赋值给变量a。

示例:

public class Demo {
    public static void main(String[] args) {
        int a = 10; // 将10赋值给变量a
        System.out.println(a);

        int b = 20;
        int c = a + b; // 先计算a + b的结果,然后将结果赋值给变量c
        System.out.println(c);

        a = a + 10; // 先计算a + 10的结果,然后将结果赋值给变量a
        System.out.println(a); // 输出20
    }
}

拓展赋值运算符:+=、-=、*=、/=、%=

扩展赋值运算符(+=、-=、*=、/=、%=)是一类特殊的赋值运算符,用于将左边的变量与右边的值进行运算,并将最终的结果赋值给左边的变量。

运算规则:

  • 对于+=运算符,相当于将左边的变量与右边的值相加,然后将结果赋值给左边的变量。

        例如:a += b; 相当于 a = a + b;

  • 对于-=运算符,相当于将左边的变量减去右边的值,然后将结果赋值给左边的变量。

        例如:a -= b; 相当于 a = a - b;

  • 对于=运算符,相当于将左边的变量乘以右边的值,然后将结果赋值给左边的变量。

        例如:a = b; 相当于 a = a * b;

  • 对于/=运算符,相当于将左边的变量除以右边的值,然后将结果赋值给左边的变量。

例如:a /= b; 相当于 a = a / b;

  • 对于%=运算符,相当于将左边的变量取模右边的值,然后将结果赋值给左边的变量。

例如:a %= b; 相当于 a = a % b;

示例:

public class OperatorDemo7 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        a += b; // 将左边的变量与右边的值相加,然后将结果赋值给左边的变量
        // 相当于 a = a + b;
        System.out.println(a); // 输出30
        System.out.println(b); // 输出20
    }
}

扩展赋值运算符可以简化代码,特别是在对变量进行累加、累减、累乘、累除等操作时非常有用。


注意:

扩展赋值运算符中的隐式强制类型转换是一个需要注意的地方

以+=运算符为例,a += b; 实际上相当于 a = (byte)(a + b);

这是因为扩展赋值运算符会自动进行类型转换,但是在进行类型转换时可能会出现溢出的情况。例如,如果a和b都是byte类型的变量,它们的值相加可能会超过byte类型的取值范围,导致溢出

为了避免溢出,需要进行强制类型转换。在上述示例中,a和b都是byte类型的变量,因此在进行a += b操作时,需要将结果强制转换为byte类型,即a = (byte)(a + b);

示例:

public class OperatorDemo8 {
    public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        // a += b;
        a = (byte)(a + b);
        System.out.println(a); // 输出30
    }
}

需要注意的是,如果进行的是整数类型之间的运算,且结果超过了目标类型的取值范围,就会发生溢出。因此,在使用扩展赋值运算符时,要注意数据类型的取值范围,避免溢出的问题。


字符串“+”的操作 **

  1. 当"+"操作符出现在字符串之间时,它不会被解释为加法操作,而是作为字符串连接符。它会将两个字符串连接起来,形成一个新的字符串。
String str1 = "Hello";  
String str2 = "World";  
String result = str1 + ", " + str2;  // 结果是 "Hello, World"
  1. 当连续使用"+"操作符进行字符串连接时,Java会从左到右逐个执行这些操作。这意味着,如果你先连接一个字符串,然后再连接另一个字符串,那么第二个字符串将会被连接到第一个字符串的后面。
int age = 18;
System.out.println("我的年龄是" + age + "岁"); //这里输出的就是“我的年龄是18岁了”

关系运算符

关系运算符,也称为比较运算符,用于比较两个值之间的关系,并返回布尔类型的结果。

常见的关系运算符有以下几种:

  • ==:判断左边的值是否等于右边的值,如果相等则返回true,否则返回false
  • !=:判断左边的值是否不等于右边的值,如果不相等则返回true,否则返回false
  • >:判断左边的值是否大于右边的值,如果大于则返回true,否则返回false
  • >=:判断左边的值是否大于等于右边的值,如果大于等于则返回true,否则返回false
  • <:判断左边的值是否小于右边的值,如果小于则返回true,否则返回false
  • <=:判断左边的值是否小于等于右边的值,如果小于等于则返回true,否则返回false

需要注意的是,关系运算符的结果一定是布尔类型的,要么是true,要么是false。在使用关系运算符时,要注意不要将==写成=,否则会变成赋值运算符,这就不是一个判断了。

示例:

public class OperatorDemo9 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a == b); // 输出false
        System.out.println(a != b); // 输出true
        System.out.println(a > b); // 输出false
        System.out.println(a >= b); // 输出false
        System.out.println(a < b); // 输出true
        System.out.println(a <= b); // 输出true
    }
}

逻辑运算符

逻辑运算符用于对布尔类型的数据进行操作

& 和 | 的使用

&:逻辑与(而且)

当两个操作数都为真时,结果为真;否则结果为假

|:逻辑或(OR)

当两个操作数中至少有一个为真时,结果为真;只有两个操作数都为假时,结果才为假

示例:

// & //两边都是真,结果才是真。
System.out.println(true & true);//true
System.out.println(false & false);//false
System.out.println(true & false);//false
System.out.println(false & true);//false

System.out.println("===================================");

// | //两边都是假,结果才是假,如果有一个为真,那么结果就是真。
System.out.println(true | true);//true
System.out.println(false | false);//false
System.out.println(true | false);//true
System.out.println(false | true);//true

^(异或)的使用:

如果两边相同,结果为false,如果两边不同,结果为true

用的不多,了解一下即可

示例:

// ^ //左右不相同,结果才是true,左右相同结果就是false
System.out.println(true ^ true);//false
System.out.println(false ^ false);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true

!(取反)的使用:

false取反就是true,true取反就是false

示例:

System.out.println(!false);//true
System.out.println(!true);//false
System.out.println(!!false);//注意点:取反最多只用一个。

注意:取反最多只用一个。

短路逻辑运算符

和 & 、| 的用法一致,但有些不同之处

  1. && (逻辑与运算符),如果左边的条件为假,那么右边的条件不会被判断,整个表达式的结果就是假。只有当左边的条件为真时,才会去判断右边的条件。因此,如果左边的条件为假,使用 && 运算符可以避免一些不必要的判断,从而提高代码的执行效率。
  2. || (逻辑或运算符),如果左边的条件为真,那么右边的条件不会被判断,整个表达式的结果就是真。只有当左边的条件为假时,才会去判断右边的条件。因此,如果左边的条件为真,使用 || 运算符可以避免一些不必要的判断,从而提高代码的执行效率。
  • & 和 | 运算符不会进行这样的短路判断,无论左边的条件是真还是假,都会去判断右边的条件。因此,如果在某些情况下我们希望避免不必要的判断,我们应该使用 && 或 || 而非 & 或 |。

这种效果使得当左边的条件能够确定整个表达式的结果时,右边的条件就不会被执行,就像短路一样,称为短路逻辑运算符。而且这么做也会提高代码的执行效率。


三元运算符

又叫 三元表达式、问号冒号表达式

格式如下:

关系表达式 ? 表达式1 : 表达式2;

计算规则:

  • 首先计算关系表达式的值。
  • 如果关系表达式的值为真(即满足条件),那么执行表达式1,并返回表达式1的结果作为整个三元表达式的结果。
  • 如果关系表达式的值为假(即不满足条件),那么执行表达式2,并返回表达式2的结果作为整个三元表达式的结果。

需要注意的是,三元运算符的最终结果一定要被使用。你可以将结果赋值给一个变量,或者直接打印出来

示例:

int x = 5;
int y = 10;
int max = (x > y) ? x : y;

比较变量x和变量y的值。如果x大于y,则将x的值赋给变量max;否则,将y的值赋给变量max。在这个例子中,由于x的值为5,y的值为10,所以y较大,结果max将被赋值为10


运算符优先级

Java运算符的优先级(由大到小)按照如下顺序进行计算:

  1. 一元运算符(单目运算符),包括负号(-)和自加自减(++、--)。
  2. 算术运算符,包括乘法(*)、除法(/)、取模(%)。
  3. 加法运算符和减法运算符(+、-)。
  4. 关系运算符(>、<、>=、<=、==、!=)。
  5. 逻辑运算符(&&、||、&、|、^)。
  6. 三目运算符(? :)。
  7. 赋值运算符(=)。

在表达式中,优先级高的运算符会先被计算,如果多个运算符拥有相同的优先级,则按照从左到右的顺序进行计算

对于给出的代码示例,先计算负号运算符,然后再计算除法运算符,最后打印出结果x的值。123

还知道其中一点:小括号优先于所有。


隐式转换与强制转换

隐式转换

概念

也叫自动类型提升。

就是把一个取值范围小的数据或者变量,赋值给另一个取值范围大的变量。此时不需要我们额外写代码单独实现,是程序自动帮我们完成的。

简单记忆

就是小的给大的,可以直接给。

两种提升规则

  • 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算。
  • byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算。

取值范围从小到大的关系

byte < short < int < long < float < double


强制转换

概念

如果要把一个取值范围大的数据或者变量赋值给另一个取值范围小的变量。是不允许直接操作。

如果一定要这么干,就需要加入强制转换。

书写格式

目标数据类型 变量名 = (目标数据类型)被强转的数据;

简单理解

要转成什么类型的,那么就在小括号中写什么类型就可以了。

案例:

public class OperatorDemo2 {
    public static void main(String[] args) {
        double a = 12.3;
        int b = (int) a;
        System.out.println(b);//12
    }
}

注意点:

强制转换有可能会导致数据发生错误。(数据的精度丢失)


*转义字符

在Java中,转义字符是以反斜杠\开头的特殊字符序列,它们用于表示不能直接输入的字符。以下是Java中的一些常用转义字符及其相关的代码示例:

\n:换行符。在Java中,\n用于在输出中创建新行

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello\nWorld");
    }
}

运行结果:

Hello
World

\t:制表符。在Java中,\t用于在输出中创建制表位

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello\tWorld");
    }
}

运行结果:

Hello    World

\":双引号。在Java中,\"用于在字符串中表示双引号字符

public class Main {
    public static void main(String[] args) {
        System.out.println("\"Hello World\"");
    }
}

运行结果:

"Hello World"

 \':单引号。在Java中,\'用于在字符串中表示单引号字符

public class Main {
    public static void main(String[] args) {
        System.out.println("\'Hello World\'");
    }
}

运行结果:

'Hello World'

 \\:反斜杠。在Java中,\\用于在字符串中表示反斜杠字符本身

public class Main {
    public static void main(String[] args) {
        System.out.println("\\");
    }
}

运行结果:

\

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨空集

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值