Java的基础概念(二)

一.运算符和表达式

运算符:

就是对常量或者变量进行操作的符号。

比如: +(加)、 -(减)、 *(乘)、 / (除)

表达式:

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

比如:a + b 这个整体就是表达式。

而其中+号是算术运算符的一种,所以这个表达式也称之为算术表达式。

二.算术运算符

分类:

      • / %

运算特点:

      • :跟小学数学中一模一样没有任何区别.

/:代表除

%:代表取余

下面列举特别的除/与取余%

/:除
1.整数相除结果只能得到整除,如果结果想要是小数,必须要有小数参数。
2.小数直接参与运算,得到的结果有可能是不精确的。
案例:
System.out.println( 10 / 3);//3
System.out.println(10.0 / 3);//3.3333333333333335
%:取余。获取余数。
案例:
System.out.println(10 % 2);//0
System.out.println(10 % 3);//1
应用场景:
//可以利用取模来判断一个数是奇数还是偶数
System.out.println(15 % 2);//1  奇数

数据练习:数值拆分

需求:键盘输入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

代码示例:

//1.键盘输入一个三位数
// 创建Scanner对象    作用:可以从控制台、文件或字符串等不同来源读取输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数");
int number = sc.nextInt();//123//2.获取这个三位数的个位、十位、百位并打印出来
//公式:
//针对于任意的一个数而言
//个位: 数字 % 10
int ones = number % 10;
//十位: 数字 / 10 % 10
int tens = number / 10 % 10;
//百位: 数字 / 100 % 10
int hundreds = number / 100  % 10;//输出结果
System.out.println(ones);
System.out.println(tens);
System.out.println(hundreds);

公式:

获取任意一个数上每一位数。

个位:数字 % 10

十位:数字 / 10 % 10

百位:数字 / 100 % 10

。。。以此类推。。。

3.隐式转换

概念:

也叫自动类型提升。

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

简单记忆:

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

两种提升规则:

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

取值范围从小到大的关系:

byte short int long float double

4.隐式转换的练习

请看下面案例是否有误,如果有问题,请说出原因,如果没有问题,请说出运算过程和运算结果

案例一:

double d = 10;
System.out.println(d);//10.0

解释:

10是整数,整数默认是int类型的。

而在取值范围的顺序中:byte short int long float double

在赋值的时候把一个int类型的赋值给了一个double类型的。把一个小的赋值给一个大的是可以直接给的。

案例二:

byte b = 100;
int i = b;//可以成功赋值

解释:

因为byte的取值范围是小的,int的取值范围是大的,在底层进行了隐式转换,不需要我们额外写代码单独实现,是可以直接赋值。

案例三:

int i = 10;
long n = 20L;
??? result = i + n;
问变量result是什么类型的?

解释:

变量i是int类型的,变量n是long类型的。

而在取值范围的顺序中:byte short int long float double

变量i里面的值会自动提升为long类型的,最终的结果其实就是两个long相加,那么最终的result是long类型的。

案例四:

int i = 10;
long n = 100L;
double d = 20.0;
??? result = i + n + d;
问变量result是什么类型的?

解释:

变量i是int类型,变量n是long类型,变量d是double类型。

而在取值范围的顺序中:byte short int long float double

所以变量i和变量n里面的值在参与运算的时候,都会进行类型提升,变成double。

最终其实就是三个double进行相加,那么最终的结果就是double类型的。

案例五:

byte b1 = 10;
byte b2 = 20;
??? result = b1 + b2;//int
问变量result是什么类型的?

解释:

因为b1和b2都是byte类型的。所以在参与计算的时候,变量b1和变量b2里面的值都会自动提升为int类型的。最终其实就是两个int类型的相加,最终结果也是int类型的。

案例六:

byte b = 10;
short s = 20;
long n = 100L;
??? result = b + s + n;
问变量result是什么类型的?long

解释:

变量b是byte类型的,变量s是short类型的,变量n是long类型的。

byte,short,char类型的变量在参与运算的时候,变量里面的值会直接先提升为int。

第一步:变量b和变量s里面的值会先提升为int参与运算。

int + int + long

第二步:而long类型的取值范围是大于int的取值范围的。

所以变量b和变量s里面的值会再次提升为long。

long + long + long。

所以最终结果是long类型的。

5.强制转换

概念:

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

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

书写格式:

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

简单理解:

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

案例:

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

注意点:

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

6.字符串的+操作

核心技巧:

  • 当+操作中出现字符串时,此时就是字符串的连接符,会将前后的数据进行拼接,并产生一个新的字符串。
  • 当连续进行+操作时,从左到右逐个执行的。

7.字符串相加的练习:

案例1:

1 + “abc” + 1

结果:“1abc1”

解释:

第一步: 1 + “abc”。在这个过程中,有字符串参与的,所以做的是拼接操作,产生一个新的字符串"1abc"

第二步: “1abc” + 1。这个过程中,有字符串参与的,所以做的也是拼接操作,产生一个新的字符串"1abc1"

案例2:

1 + 2 + “abc” + 2 + 1

结果:“3abc21”

解释:

第一步:1 + 2 。在这个过程中,没有字符串参与的,所以做的是加法运算,结果为3。

第二步:3 + “abc”。在这个过程中,有字符串参与的,所以做的是拼接操作,产生一个新的字符串"3abc"。

第三步:“3abc” + 2。在这个过程中,有字符串参与的,所以做的是拼接操作,产生一个新的字符串"3abc2"。

第四步:“3abc2” + 1。在这个过程中,有字符串参与的,所以做的是拼接操作,产生一个新的字符串“3abc21”

案例3:

String name = "天启互联网工作室";
System.out.println("我的名字是" + name);

结果: 我的名字是天启互联网工作室

解释:当字符串跟变量相加的时候,实际上是跟变量里面的值进行拼接。

8.字符的+操作

规则:

当+操作中出现了字符,会拿着字符到计算机内置的ASCII码表中去查对应的数字,然后再进行计算。

案例:

char c = 'a';
int result = c + 0;
System.out.println(result);//97

ASCII码表中:

‘a’ ----- 97

‘A’ ----- 65

9.算术运算符的总结

分类:

      • / % 这些操作跟小学数学几乎是一模一样的。

注意点:

  • / 和 % 的区别:他们两个都是做除法运算,/取结果的商。% 取结果的余数。
  • 整数操作只能得到整数,如果想要得到小数,必须有浮点数参与运算。

算术运算符的高级用法:

是以+为例进行的讲解,其余减法,乘法,除法的运算规则也是一样的。

特例:字符串只有+操作,没有其他操作。

10.自增自减运算符

分类:

++  自增运算符
--  自减运算符

++:就是把变量里面的值+1

–:就是把变量里面的值-1

使用方式:

  • 放在变量的前面,我们叫做先++。 比如:++a
  • 放在变量的后面,我们叫做后++。 比如:a++

注意点:

不管是先++,还是后++。单独写在一行的时候,运算结果是一模一样的。

案例:

//++
int a = 10;
a++;//就是让变量a里面的值 + 1
System.out.println(a);//11
++a;//就是让变量a里面的值 + 1
System.out.println(a);//12

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

某些情况下,变量需要进行加1或者减1的时候使用。

比如:过生日多一岁,就用到了自增运算符。

比如:购物商场中,选择商品数量,也用到了自增或者自减运算符。

11.赋值运算符

最为常用的: =

运算过程:就是把等号右边的结果赋值给左边的变量

案例:

public class OperatorDemo6 {public static void main(String[] args) {//1.最为简单的赋值运算符用法int a = 10;//就是把10赋值给变量aSystem.out.println(a);//2.如果等号右边需要进行计算。int b = 20;int c = a + b;//先计算等号右边的,把计算的结果赋值给左边的变量System.out.println(c);//3.特殊的用法a = a + 10;//先计算等号右边的,把计算的结果赋值给左边的变量System.out.println(a);//20}
}

12.扩展赋值运算符

分类:

+=、-=、*=、/=、%=

运算规则:

就是把左边跟右边进行运算,把最终的结果赋值给左边,对右边没有任何影响。

案例:

public class OperatorDemo7 {public static void main(String[] args) {//扩展赋值运算符int a = 10;int b = 20;a += b;//把左边和右边相加,再把最终的结果赋值给左边,对右边没有任何影响// 相当于 a = a + b;System.out.println(a);//30System.out.println(b);//20}
}

注意点:

扩展的赋值运算符中隐层还包含了一个强制转换。

以+=为例。

a += b ;实际上相当于 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}
}

13.关系运算符

又叫比较运算符,其实就是拿着左边跟右边进行了判断而已。

分类:

符号解释
==就是判断左边跟右边是否相等,如果成立就是true,如果不成立就是false
!=就是判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false
>就是判断左边是否大于右边,如果成立就是true,如果不成立就是false
>=就是判断左边是否大于等于右边,如果成立就是true,如果不成立就是false
<就是判断左边是否小于右边,如果成立就是true,如果不成立就是false
<=就是判断左边是否小于等于右边,如果成立就是true,如果不成立就是false

注意点:

  • 关系运算符最终的结果一定是布尔类型的。要么是true,要么是false
  • 在写==的时候,千万不要写成=

14.逻辑运算符

& 和 | 的使用:

&:逻辑与(而且)

两边都为真,结果才是真,只要有一个为假,那么结果就是假。

|:逻辑或(或者)

两边都为假,结果才是假,只要有一个为真,那么结果就是真。

代码示例:

// &  //两边都是真,结果才是真。
System.out.println(true & true);//true
System.out.println(false & false);//false
System.out.println(true & false);//false
System.out.println(false & true);//falseSystem.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);//falseSystem.out.println(!!false);//注意点:取反最多只用一个。

15.短路逻辑运算符

分类: && ||

&&:

运算结果跟&是一模一样的,只不过具有短路效果。

||:

运算结果跟|是一模一样的。只不过具有短路效果。

逻辑核心:

当左边不能确定整个表达式的结果,右边才会执行。

当左边能确定整个表达式的结果,那么右边就不会执行了。从而提高了代码的运行效率。

举例:

  • 用户登录案例

用户名正确 & 密码正确

如果使用一个&,不管用户名是否正确都会去验证密码。

思考:

如果用户名输入正确了,那么我们再判断密码是否正确,是符合业务逻辑的。

但是如果用户名输入错误了,那么现在还有必要去比较密码吗?没有不要了。

如果使用一个&,那么左边和右边不管什么情况下,都会执行。

用户名正确 && 密码正确

如果用户名输入正确了,那么才会验证密码是否输入正确。

如果用户名输入错误了,那么就不会再去验证密码是否正确,最终的结果直接为false。从而提高了程序运行的效率。

总结:

&& 和 & 、||和|的运行结果都是一模一样的。

但是短路逻辑运算符可以提高程序的运行效率。

建议:

最为常用: && || !

16.三元运算符

又叫做:三元表达式或者问号冒号表达式。

格式:

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

计算规则:

  • 计算关系表达式的值。
  • 如果关系表达式的值为真,那么执行表达式1。
  • 如果关系表达式的值为假,那么执行表达式2。

注意点:

三元运算符的最终结果一定要被使用,要么赋值给一个变量,要么直接打印出来。

案例:

public class OperatorDemo12 {public static void main(String[] args) {//需求:求两个数的较大值int a = 10;int b = 20;//格式:关系表达式 ? 表达式1 : 表达式2 ;//注意点://三元运算符的最终结果一定要被使用。//要么赋值给一个变量,要么直接输出。int max =  a > b ? a : b ;System.out.println(max);System.out.println(a > b ? a : b);}
}

17.练习1-两只坤

需求:

家里有两只坤,两只坤的体重分别为通过键盘录入获得,

请用程序实现判断两只坤的体重是否相同。

代码示例:

//1.获取两只坤的体重
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一只坤的体重");
int weight1 = sc.nextInt();
System.out.println("请输入第二只坤的体重");
int weight2 = sc.nextInt();//2.利用三元运算符求出最终结果
String result = weight1 == weight2 ? "相同" : "不相同";
System.out.println(result);

18.练习2-求三个数的最大值

需求:

一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm。

请用程序实现获取这三个和尚的最高身高。

代码示例:

//1.定义三个变量记录和尚的身高
int height1 = 150;
int height2 = 210;
int height3 = 165;//2.利用三元运算符求出两个数中的较大值。
int temp = height1 > height2 ? height1 : height2;//3.求出最终的结果
int max = temp > height3 ? temp : height3;System.out.println(max);

19.运算符的优先级

在Java中涉及了很多的运算符,每一种运算符都有各自的优先级。但是这些优先级不需要记忆。

咱们只要知道其中一点:

小括号优先于所有。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/500809.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

铁路轨道缺陷数据集,4278张原始图片,支持YOLO,PASICAL VOC XML,COCO JSON格式的标注,可识别是否有裂缝,和间隙缺陷

铁路轨道缺陷数据集&#xff0c;4278张原始图片&#xff0c;支持YOLO&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注&#xff0c;可识别是否有裂缝&#xff0c;间隙缺陷 可识别的标签信息如下&#xff1a; 裂缝 &#xff08;crack&#xff09; 间隙 &#…

Docker学习相关笔记,持续更新

如何推送到Docker Hub仓库 在Docker Hub新建一个仓库&#xff0c;我的用户名是 leilifengxingmw&#xff0c;我建的仓库名是 hello_world。 在本地的仓库构建镜像&#xff0c;注意要加上用户名 docker build -t leilifengxingmw/hello_world:v1 .构建好以后&#xff0c;本地会…

2025差旅平台推荐:一体化降本30%

医药行业因其高度专业化的特点&#xff0c;同时在运营过程中又极为依赖供应链和销售网络&#xff0c;因此差旅管理往往成为成本控制的重要环节。本期&#xff0c;我们以差旅平台分贝通签约伙伴——某知名药企为例&#xff0c;探讨企业如何通过差旅一体化管理&#xff0c;在全流…

LLM(十二)| DeepSeek-V3 技术报告深度解读——开源模型的巅峰之作

近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的发展突飞猛进&#xff0c;逐步缩小了与通用人工智能&#xff08;AGI&#xff09;的差距。DeepSeek-AI 团队最新发布的 DeepSeek-V3&#xff0c;作为一款强大的混合专家模型&#xff08;Mixture-of-Experts, MoE&a…

AWS re:Invent 2024 - Dr. Werner Vogels 主题演讲

今年&#xff0c;我有幸亲临现场参加了所有的 keynote&#xff0c;每一场都让我感受到深深的震撼。无论是全新的功能发布&#xff0c;还是令人眼前一亮的新特性展示&#xff0c;每一场 keynote 都精彩纷呈&#xff0c;充满干货&#xff0c;值得反复学习和回味。 恰好&#xff…

电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教

0 缘起 一台联想电脑&#xff0c;使用Windows 10 专业版32位&#xff0c;电脑主机后置音频插孔一直没有声音&#xff0c;所以音箱是接在机箱前面版的前置音频插孔上的。 一天不小心捱到了音箱的音频线&#xff0c;音频线头断在音频插孔里面了&#xff0c;前置音频插孔因此用不…

LinuxC高级day5

作业: 1.思维导图 2.定义一个find函数&#xff0c;查找ubuntu和root的gid并使用变量接收结果 3.定义一个数组&#xff0c;写一个函数完成对数组的冒泡排序 4.使用break求1-100中的质数(质数:只能被1和他本身整除&#xff0c;如:357)

工厂模式与抽象工厂模式在Unity中的实际应用案例

一、实验目的 实践工厂模式和抽象工厂模式的实际应用。 创建一个小型的游戏场景&#xff0c;通过应用这些设计模式提升游戏的趣味性和可扩展性。 掌握在复杂场景中管理和使用不同类型的对象。 比较在实际游戏开发中不同设计模式的实际效果和应用场景。 学习如何进行简单的性…

Zynq PS端外设之GPIO

1. GPIO&#xff08;通用输入/输出&#xff09; GPIO外设有4个Bank&#xff0c;Bank0/1通过MIO连接到PS的引脚上&#xff1b;Bank2/3通过EMIO连接到PL的引脚上。 注意&#xff1a;Bank1的电平要改成LVCOMS 1.8 GPIO寄存器 寄存器&#xff1a; DATA_RO&#xff1a; 读取GPIO的输…

flux中的缓存

1. cache&#xff0c;onBackpressureBuffer。都是缓存。cache可以将hot流的数据缓存起来。onBackpressureBuffer也是缓存&#xff0c;但是当下游消费者的处理速度比上游生产者慢时&#xff0c;上游生产的数据会被暂时存储在缓冲区中&#xff0c;防止丢失。 2. Flux.range 默认…

linux文件类型和根目录结构

1.1 Linux文件类型 1.2 Linux系统的目录结构 1.2.1 FHS filesystem hierarchy standard 文件系统层级标准&#xff0c;定义了在类 Unix 系统中的目录结构和目录内容&#xff0c;即 让用户了解到已安装软件通常放置于哪个目录下。 Linux 目录结构的特点 使用树形目录结构来…

瑞_Linux中部署配置Java服务并设置开机自启动

文章目录 背景Linux服务配置步骤并设置开机自启动附-Linux服务常用指令 &#x1f64a; 前言&#xff1a;由于博主在工作时&#xff0c;需要将服务部署到 Linux 服务器上运行&#xff0c;每次通过指令启动服务非常麻烦&#xff0c;所以将 jar 包部署的服务设置开机自启动&#x…

算法题(23):只出现一次的数字

初级&#xff1a; 审题&#xff1a; 需要输出只出现了一次的数据&#xff0c;其他数据均出现了两次 思路&#xff1a; 若不限制空间复杂度&#xff1a; 方法一&#xff1a;哈希表 用哈希映射循环一次&#xff0c;把对应数字出现的次数记录到数组里面&#xff0c;然后再遍历一次…

STM32拓展 低功耗案例1:睡眠模式 (register)

需求描述 让MCU进入睡眠模式&#xff0c;然后通过串口发送消息来唤醒MCU退出睡眠模式。观察LED在进入休眠模式后是否仍然开启。 思考 首先睡眠模式&#xff0c;唤醒的条件是中断&#xff0c;外部内部都可以&#xff0c;这里的串口接收中断时内部中断。 拓展&#xff1a;中断…

CSS 学习之 padding 与图形绘制

padding 属性和 background-clip 属性配合&#xff0c;可以在有限的标签下实现一些 CSS 图形绘制效果&#xff0c;我这里举两个小例子&#xff0c;重在展示可行性。 例 1:不使用伪元素&#xff0c;仅一层标签实现大队长的“三道杠”分类图标效果。此效果在移动端比较常见&…

机器学习 学习知识点

机器学习 学习知识点 什么是消融实验&#xff08;Ablation experiment&#xff09;&#xff1f;num_step与batch_size的区别python glob.glob()函数认识python的条件判断之is not、is not None、is Nonetqdm介绍及常用方法softmax 激活函数。type_as(tesnor)Python OpenCV cv2.…

【网络安全 | 漏洞挖掘】硬编码凭据泄露实现支付系统账户接管

未经许可,不得转载。 文章目录 前言在APK中寻找硬编码凭据+账户接管在APP流程中寻找硬编码凭据+账户接管总结前言 硬编码凭据是指直接嵌入应用程序源代码中的敏感信息,例如 API 密钥、密钥、用户名或密码。这些凭据通常为了开发便捷而添加,但往往在发布到生产代码或应用路径…

【数据库系列】Spring Boot 中整合 MyBatis-Plus详细步骤

在 Spring Boot 中整合 MyBatis-Plus 可以按照以下步骤进行&#xff1a; 一、整合步骤 1. 创建 Spring Boot 项目 首先&#xff0c;使用 Spring Initializr&#xff08;https://start.spring.io/&#xff09;创建一个新的 Spring Boot 项目。在创建过程中&#xff0c;选择以…

JVM实战—8.如何分析jstat统计来定位GC

大纲 1.使用jstat了解线上系统的JVM运行状况 2.使用jmap和jhat了解线上系统的对象分布 3.如何分析JVM运行状况并合理优化 4.使用jstat分析模拟的BI系统JVM运行情况 5.使用jstat分析模拟的计算系统JVM运行情况 6.问题汇总 1.使用jstat了解线上系统的JVM运行状况 (1)JVM的…

[人工智能] 结合最新技术:Transformer、CLIP与边缘计算在提高人脸识别准确率中的应用

随着人工智能的快速发展&#xff0c;特别是深度学习和自然语言处理领域的革命性技术&#xff0c;越来越多的前沿技术被应用于人脸识别中。Transformer架构、CLIP模型以及边缘计算的结合&#xff0c;正成为提升人脸识别准确率和应用效能的关键技术路径。特别是在多样化场景下&am…