Java基础学习——运算符

简介: 在运算时,不同数据类型之间无法进行运算,需要将数据类型转化为同一种数据类型才能进行运算。而数据类型的转换也分为隐式转换(自动转换)和强制类型转换,要想知道何时需要我们强制转换数据类型,必须首先知道数据类型的种类

JAVA学习笔记1—运算符



前言


运算符是对字面量或者变量进行操作的符号,在本文中会介绍算术运算符、自增自减运算符、赋值运算符、关系运算符、关系运算符、逻辑运算符和三元运算符六种运算符。


算术运算符


算术运算符一共有五种:加减乘除以及取余


符号 作用
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取余、取模运算


加法运算


在Java中,加法运算一共有三类:数字间的加法运算、字符串间的加法运算以及字符间的加法运算


数字相加


简单的小学运算,不多加介绍,要注意的就是不同数据类型相加,详见“数据类型转换”


字符串相加


当数字、字母、文字加上双引号以后就变成了字符串,此时数字间就不进行数据相加了


public class Test {
    public static void main(String[] args) {
        System.out.println("1"+"23");
    }
}

615a582347394574bd74c55b9384a781.jpg


需要特别注意的是,在字符串后面的 数字 默认都是字符串,即使不加双引号也按照字符串相加来进行运算


public class Test {
    public static void main(String[] args) {
        System.out.println("12"+"答案"+1+2);
    }
}

73adb6a213b94fc5afff22d4ac8bdbee.jpg


字符相加


当字符+字符/字符+数字时,会将字符转换为它对应的ASCII码再相加,需要特别记忆的两个ASCII码如下


‘A’:65


a’:97


用IDEA来测试一下


public class Test {
    public static void main(String[] args) {
        System.out.println('a' + 1);
    }
}

c221b066ef3a4ab1865b74ced2d50f60.jpg


除法运算


当两个整数相除时,结果不含小数;只要有一个数是浮点型,结果就是浮点型,但是其精度会有所损失


public class Test {
    public static void main(String[] args) {
        System.out.println(10 / 3);
    }
}

fdd037a085bc47eb8b327a212fc15106.png


public class Test {
    public static void main(String[] args) {
        System.out.println(10.0 / 3);
    }
}

a80a1ad8ffed4e44ab0a33fe37b24e38.jpg


取余/取模运算


做除法运算后,取余数;同样地,只要有一个数是浮点型,结果就是浮点型


public class Test {
    public static void main(String[] args) {
    System.out.println(10 % 3);
    }
}

a1c1824550d24468805c56e4f0820d74.png


public class Test {
    public static void main(String[] args) {
    System.out.println(10.0 % 3);
    }
}

7f5d77448eba46c8872eee20e6c077ae.jpg


取余/取模可以应用在判断是否整除的场景中


列如:a % b = 0 代表a是b的整数倍(a、b都不为0)


当a = 0 时,b为除0以外任何数,a % b = 0


数据类型的转换


在运算时,不同数据类型之间无法进行运算,需要将数据类型转化为同一种数据类型才能进行运算。而数据类型的转换也分为隐式转换(自动转换)和强制类型转换,要想知道何时需要我们强制转换数据类型,必须首先知道数据类型的种类

如下图所示是取值范围由小到大排列的数据类型


数据类型 取值范围
byte -128~127
short -2的15次方~2的15次方-1
int -2的31次方~2的31次方-1
long -2的63次方~2的63次方-1
float 3.402823e+38 ~ 1.401298e-45
double 1.797693e+308~ 4.9000000e-324


需要注意的是:不同类型的数值(int及以上的数据类型)在运算时,需要将取值范围小的强制转换成取值范围大的数据类型再进行运算


隐式转换(自动类型提升)


当数据类型是byte、short、char时,在运算过程中将自动转换成int型进行运算,故要注意不同类型的取值范围,否则程序会报错,显示数值溢出


字符型(char)在运算时会自动将字符转化成ASCII码进行运算


强制类型转换


当将取值范围大的变量赋值给取值范围小的变量时,就需要强制类型转换


格式:目标数据类型 变量名 = (目标数据类型)被强制转换的数据


例如:


double num = 6.6;
int x = (int) num;
System.out.println(num);


输出结果为:6


自增、自减运算符


自增


自增有两种:前加加(++i)、后加加(i++),在单独运算时两者并无区别,都是将i的值增加1,即:i = i+1 ;但是在参与运算以后就会有明显区别。在参与运算后,++i 先自增后赋值,i++则是先赋值再自增。

下面,用IDEA来实现一下两者的区别


/*/ 后加加/*/
public class Test {
    public static void main(String[] args) {
     int i = 1;
     int a = i++;
        System.out.println("a的值是:"+ a);
        System.out.println("i的值是:"+ i);
    }
}


f88d9308bf5349bda2770f21e7f10e1b.jpg

/*/ 前加加/*/
public class Test {
    public static void main(String[] args) {
     int i = 1;
     int a = ++i;
        System.out.println("a的值是:"+ a);
        System.out.println("i的值是:"+ i);
    }
}

d32ca66a597b4d94b2a9f90246b5e3a9.jpg


自减


同自增,这里直接用IDEA实现二者区别


/*/ 后减减/*/
public class Test {
    public static void main(String[] args) {
     int i = 1;
     int a = i--;
        System.out.println("a的值是:"+ a);
        System.out.println("i的值是:"+ i);
    }
}

29a0aab2966948d68559a010cd0bac8b.jpg


/*/ 前减减/*/
public class Test {
    public static void main(String[] args) {
     int i = 1;
     int a = --i;
        System.out.println("a的值是:"+ a);
        System.out.println("i的值是:"+ i);
    }
}

bea56c6bb3c544d1bd261d9d5c5dd29a.png


赋值运算符


赋值运算符主要有六种,如下图所示;且扩展的赋值运算符都隐含了强制类型转换


符号 作用
= 赋值
+= 加后赋值,i+=a→i=i+a
-= 减后赋值,i-=a→i=i-a
*= 乘后赋值 ,i*=a→i=i*a
/= 除后赋值 ,i/=a→i=i/a
%= 取余后赋值,i%=a→i=i%a


关系运算符


关系运算符只有两种结果:True(成立)/False(不成立),他们都是布尔型(boolean)


符号 作用
== 判断是否相等
!= 判断是否不相等
>= 判断是否大于等与
<= 判断是否小于等与
> 判断是否大于
< 判断是否小于


逻辑运算符


逻辑运算符包含四种逻辑运算符和两种短路运算符


四种逻辑运算符


0234eb1a5f054fa8a6db9be60d7eef1f.png

(图源自黑马程序员)


两种短路运算符


短路运算符结果与逻辑运算符相同,但是短路运算符在知道左式结果的情况下就能知道整个式子的结果,这样大大增加了程序运行的效率,所以在编写程序时更偏重于运用短路运算符


396aba4f42a549949a9964f252f9a51f.png

(图源自黑马程序员)


这里直接通过IDEA实现短路运算符的特点


/*/短路或/*/
public class Test {
    public static void main(String[] args) {
    boolean result;
    int a = 5;
    int i = 1;
    result = (a++ > 2) || (++i < 5);
        System.out.println("a的值是:" +a);
        System.out.println("i的值是:"+ i);
    }
}

63e0c744f0e04334834042b7266f5fc2.png


从这个程序中我们可以看出++i这个语句并没有执行,而是直接打印输出


(如果执行了++i的话,i的值应该是2而不是1,因为++i是先自增再赋值)


其原理是: a||b 在a为true的情况,不论b是true/false,其结果一定是true,所以不用执行符号右边的语句


/*/短路与/*/
public class Test {
    public static void main(String[] args) {
    boolean result;
    int a = 5;
    int i = 1;
    result = (a++ < 2) && (++i < 5);
        System.out.println("a的值是:"+a);
        System.out.println("i的值是:"+i);
    }
}

1c74682fbaea439fbd6bd5b29752c5ff.png


从这个程序中我们可以看出++i这个语句并没有执行,而是直接打印输出


(如果执行了++i的话,i的值应该是2而不是1,因为++i是先自增再赋值)


其原理是: a&&b 在a为false的情况,不论b是true/false,其结果一定是false,所以不用执行符号右边的语句


三元运算符


格式:表达式 ? 表达式1 : 表达式2


文字不太好解释三元运算符,这里直接上代码


public class 测试 {
    public static void main(String[] args) {
    boolean result;
    int a = 1;
    int b = 2;
        System.out.println(a > b ? "a大于b" : "a小于b");
    }
}

ce8cc02603e44f2f84497bf8d1c6a719.png


解释一下上面的程序:


判断a是否大于b,如果是,则输出"a大于b",如果不是,则输出"a小于b"


因此,表达式 ? 表达式1 : 表达式2 可以这么理解:


判断表达式是否成立(true or false?),如果成立(true)则输出表达式1,如果不成立(false)则输出表达式2


结语


运算符也是有优先级的,最最重要的是小括号优先,所以写程序时擅用小括号可以使得代码更加简洁明了,在下一篇文章中会有一些具体的基础练习题,难度适合初学者,如果是自学者也可以检验一下自己的学习成果。

相关文章
|
20天前
|
存储 Java
java中的常见运算符的计算方式
本文介绍了计算机中二进制数的原码、反码和补码的概念及其转换方式。原码是符号位加真值的绝对值;反码中正数不变,负数其余位取反;补码在反码基础上加1。文章还详细解释了Java中的常见运算符(如按位与、或、异或、移位等)如何基于二进制进行计算,并探讨了使用补码的原因,包括统一符号位处理和扩展表示范围。通过具体代码示例帮助理解这些概念。
java中的常见运算符的计算方式
|
1天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
18 4
|
1天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
18 4
|
1天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
10 1
|
3月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
113 43
Java学习十六—掌握注解:让编程更简单
|
3月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
53 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
2月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
3月前
|
算法 Java 测试技术
🌟Java 零基础 | 详解 单目运算符
【10月更文挑战第14天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
78 7
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
Java 测试技术 开发者
🌟Java 零基础 | 深入理解三目运算符
【10月更文挑战第13天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
191 3