初识java——javaSE(2)--运算符与逻辑控制【求个关注】
文章目录
- 一 运算符
- 1.1 算术运算符
- 当两个不同类型的值相加时:
- / 运算符
- %运算符
- 1.2 关系运算符
- 1.3 逻辑运算符
- 短路:
- 逻辑非
- 1.4 位运算符
- &
- |
- ^
- 位运算符当作逻辑运算符中使用
- ~
- >>
- <<
- >>>
- 1.5 赋值运算符
- 1.6 三目运算符
- 二 逻辑控制
- if语句
- switch语句
- 对于switch语句与if语句的差异
- while语句
- break与continue
- do while 与for 语句
一 运算符
1.1 算术运算符
算术运算符有以下几种:+ - * / %
当两个不同类型的值相加时:
当两个不同类型的值进行相加时,较小类型的值其类型会自动转换成较大类型。
代码:
byte a = 2;int b = 5;int c = a+b;System.out.println(c);
byte b1 = 5;int i = 5;byte b2 = b1+i;System.out.println(b2);
因为变量b1与i相加,首先b1自动转换类型为int ,然后b1+i的值为int类型,赋给byte类型b2,没有强制类型转换操作符,所以报错!
/ 运算符
当除数为0时:
int a = 10/0;System.out.println(a);
输出结果显示异常,其提示是因为/ by zero,即除以0的原因。
整数与整数之间相除,结果取整,对于小数部分则丢弃
int a = 5;byte b = 2 ;System.out.println(a/b);
整数与浮点数相除,结果为小数
int a = 5;double d = 2.0;System.out.println(a/d);System.out.println(d/a);
%运算符
%运算符的右操作数亦不能为0
int b = 8%0;System.out.println(b);
整数与整数之间的取模,结果依然为整数,为正整数还是负整数取决于操作数的符号
int a = 5;int b = 2;int c = -2;System.out.println(a%b);System.out.println(a%c);//正数对负数取模int a2 = -5;System.out.println(a2%b);//负数对正数取模
整数与浮点数之间的取模,结果为浮点数,为正数还是负数,亦取决于操作数的符号
int a2 = 5;float f1 = 2.0f;System.out.println(a2%f1);
浮点数与浮点数之间的取模结果依然是浮点数,结果的符号,取决于操作数的符号
double d1 = -5.0;double d2 = 2.0;System.out.println(d1%d2);
1.2 关系运算符
关系运算符: > , < , == , >= , <=,!=
关系运算符与操作数组成的表达式为关系表达式,关系表达式的结果是布尔类型,值有两种,true与false
因此关系表达式是布尔表达式的一种。
举例:
int a = 10;int b = 5;boolean b1= a>b ;System.out.println(b1);
1.3 逻辑运算符
逻辑运算符有:&& 逻辑与 || 逻辑或 !逻辑非
//&&的逻辑是两边的布尔表达式的结果都为true,则此逻辑表达式的结果为true,否则结果为false。
int a = 10;int b =5;boolean b1 = a>b&&10>0;System.out.println(b1);
|| 逻辑或
此运算符的逻辑是,两边的布尔表达式的结果均为false,此逻辑表达式的结果才为false,否则结果为true
int a = 10;int b =5;boolean b1 = a>b||10<0;System.out.println(b1);
短路:
在java中的短路与c语言中的短路是一样的,这里再系统阐述一下:
对于逻辑与 与 逻辑或 操作符的特性//提出了短路的思想//对于逻辑与操作符 ,如果左边的布尔表达式的结果为false,则此逻辑表达式的结果一定为false,所以右边的布尔表达式就不需要再//计算了,也不会再计算//这样是为了节省资源,减少不必要的执行
int a =10;int b =5;// boolean b2 = 10/0>5; //这样会报警告boolean b1 = a<b&& 10/0>5;//这个算式不会,原因就在于后面的表达式根本就没有执行!System.out.println(b1);
int a = 6;int b = 4;boolean b1 = a>b|| 10/0>5;System.out.println(b1); //此时不会报警告,因为第一个布尔表达式值为true,所以第二个布尔表达式不会执行//也就不会报警告
逻辑非
此运算符的作用是用于改变布尔表达式的值,如果是false,则变为true,如果是true,结果是false
System.out.println(!false);System.out.println(!true);System.out.println(! (10>0));
1.4 位运算符
位操作符& 按位与| 按位或^ 按位异或~ 按位取反<< 左移二进制位>> 右移二进制位>>> 无符号右移动二进制位
&
& 按位与// 按位与的操作数有两个,针对的是操作数的二进制位// 运算规则为,如果两个操作数对应的二进制位均为1,则结果对应的位为1,否则为0
byte a = 2;byte b = 3;//2 的二进制位为 ://0000 0010// 3 的二进制位为://0000 0011//则两个数的按位与结果为://0000 0010 转换为十进制,结果为2System.out.println(a&b);
//针对按位与的特性,可以得出两个结论//一个数 按位与 其本身,结果还是其本身// 一个数 按位与 0 ,结果还是0 ;
|
// |按位或//按位或的操作数有两个// 其运算规则为:如果两个操作数对应的二进制位均为0,则结果的该位为0,否则结果的该位为1
byte a1 = 2;byte b2 = 3;// 0000 0010// 0000 0011//结果://0000 0011 ——转换为十进制,结果为3。System.out.println(a1|b2);
// 对于按位或的规则,我们可以得出结论://一个数按位或其本身,结果还是其本身
^
// ^ 按位异或 按位异或也是二进制运算符,其操作数有两个
// 其运算规则是,将两个操作数对应的二进制位进行比较,如果相同,则结果中该位为0,不同该位为1
byte a1 = 3;byte b1 = 5;// 3 的二进制:0000 0011// 5 的二进制:0000 0101//3^5 的结果: 0000 0110 ——转换为十进制为6System.out.println(a1^b1);
// 一个数 按位异或 其本身,则结果为0// 一个数 按位异或 0,则结果为其本身
位运算符当作逻辑运算符中使用
//1 按位与可当作逻辑与操作符,二者的差别在于前者没有短路
System.out.println(3>0&4>0);System.out.println(3>0&10/0>1);
// 按位或可当作逻辑或操作符,二者差别在于前者没有短路
System.out.println(3<0|5>3);System.out.println(3>0|10/0>2);
~
//按位取反的操作数与其他位运算符不同,操作数只有1个//其运算规则是将一个数的二进制位全部取反,即将1变成0,将0变成1
byte a3 = 5;// 0000 0101//按位取反的结果:~5:// 1111 1010 -- 这是补码// 1000 0101 — 转换成原码// 结果为 - 6System.out.println(~a3);
>>
//>> 操作符//>>运算符的操作数有两个,运算规则是将左操作数的各个二进制位向右移动右操作数值位,// 符号位由原来符号补上
byte a = 2;// 0000 0010//a>>1// 0 0000 001 //0补上原符号位//0000 0001System.out.println(a>>1);byte a2 = - 3;//1000 0011 --原码//1111 1101 --补码//右移一位,符号位不变//1 1111 110//1111 1110--补码//1000 0010-- 原码 结果为-2System.out.println(a2>>1);
<<
// << 运算符的操作数亦有两个,运算规则是将左操作数的各个二进制位向左移动右操作数数值位,空出的位补0
byte a1 = 3;/*0000 0011a1<< 1000 0011 00000 0110 ————转化为十进制为:6*/System.out.println(a1<<1);byte b1 = -3;// 1000 0011-- 原码// 1111 1101 -- 补码// 111 1101 0 ---左移一位补0// 1111 1010 --补码// 1000 0110 结果为-6System.out.println(b1<<1);
>>>
// >>> 此运算符与>>运算符的不同之处在于>>>运算符是无符号右移,即补符号位时,只补0
byte a1 = -3;// 1000 0011 -----原码// 1111 1101 ------补码//a1>>>1 无符号右移一位// 0 1111 110//0111 1110 结果为:126System.out.println(a1>>>1); System.out.println(Integer.MAX_VALUE);
//出现这个结果说明,变量在无符号右移时,自动转化成int类型
1.5 赋值运算符
= ,+=,-= ,/= ,%=
// 赋值运算符// 赋值运算符 =byte a = 5; //意为将5赋值给变量a// +=a+=5;//a+=5,是一种简写,展开为://a = a+5 ;// -=a-=3;//同理,展开为:a =a-3;//*=a*=3;//同上,展开为:a=a*3;// /=a/=2;//同上,展开为:a=a/2;//%=a%=2;//同上,展开为:a = a%2;
1.6 三目运算符
布尔表达式 ?表达式:表达式
三目运算符共有三个操作数,其运算规则是先判断?之前的布尔表达式的值为true还是false,如果为true ,
则执行 :之前的表达式,如果为false,则执行 :之后的表达式。
// 三目运算符int c= 5>0?3:2;System.out.println(c);
二 逻辑控制
java中逻辑控制与c语言中的一样,包括:顺序执行(顺序执行代码),
选择执行(if,switch语句),循环执行(while,for,do while)
if语句
对于if语句,java与c语言不同之处即在于java中if语句的判断条件必须是布尔表达式(单纯的一个布尔值也是布尔表达式),而c语言中没有这个限制。
public class test {public static void main(String[] args) {int a = 5;int b = 4;if(a>b){System.out.println("haha");}else {System.out.println("hehe");}boolean b1 = true;if(b1) {System.out.println("xixi");}/* if(a){System.out.println("luelue");}*/}
而在c语言中数字可以作为if语句的判断条件。这体现了java语言的严谨之处
switch语句
switch也是一种选择语句,根据()中值,选择对应的case,执行相应的语句。
int a = 1;switch (a){case 1 :System.out.println(1);break;case 2:System.out.println(2);break;case 3:System.out.println(3);break;default:System.out.println("haha");}
上面的基本功能是与c语言一样的地方,与c语言不一样的地方在于:
switch语句()中允许的参数类型。
首先float类型不允许作为()中的参数类型
其次,double也不可以
long 类型也不可以
boolean 类型也不可以
上面的这四种类型不可以作为switch语句的参数
下面是可以作为参数的类型:
有些我们并没有学到,这里拿String类型举例:
String s1 = "haha";switch (s1){case "1" :System.out.println(1);break;case "2":System.out.println(2);break;case "3":System.out.println(3);break;default:System.out.println("haha");}
要注意,在java中switch语句的参数不可以是表达式,而在c语言中则可以
java:
c语言:
对于switch语句与if语句的差异
(1)switch语句不能使用复杂的判断条件,而if可以
不过在c语言中可以使用
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main(){int a = 10;int b = 3;switch (a > 2&& b<5) {case 1:printf("1");break;case 2:printf("2");break;case 3:printf("3");break;default:printf("haha\n");}
}
(2)switch语句可以嵌套,但是非常难看,代码的可读性较差
while语句
while语句与c语言中的区别在于其判断条件必须是布尔表达式,
当布尔表达式只是一个单纯的布尔值时,就会陷入死循环
int a = 3;
while (a<10){System.out.println(a);a++;
}
break与continue
在java中的break与continue的作用与c语言中的作用是相同的,这里再复习一下这两个语句的功能
break
break语句的作用是跳出当前的循环(即如果是多层嵌套循环的话,只跳出当前的一层)
for(int i =0;i<2;i++){for(int j = 0;j<10;j++){if(j==3){break;}System.out.println(j);}}
此例中,当j==3时,执行break语句,跳出最内层循环,然后继续执行外层循环,所以会出现这个结果
continue
continue语句的作用是停止本次循环,而进入下一循环,注意不是跳出循环。
for(int i =0;i<2;i++){for(int j = 0;j<10;j++){if(j==3){continue;}System.out.println(j);}}
在结果中我们看到并没有出现3,是因为j==3时,执行continue语句,进入下一循环,而不会指向打印3的语句。
do while 与for 语句
do while
do while语句的判断条件与while一样,必须是布尔表达式
它与while的区别在于while语句是根据判断条件的布尔值判断是否执行语句,而do while 的功能是先执行一遍语句,再根据判断条件判断是否继续执行。
do {System.out.println(3);
}
while (false);
for 语句
对于for语句,其判断条件可以是布尔表达式,也可以为空,当for语句的判断条件为空时,默认为恒为真。这会陷入死循环当中。
相关文章:

初识java——javaSE(2)--运算符与逻辑控制【求个关注】
文章目录 一 运算符1.1 算术运算符当两个不同类型的值相加时:/ 运算符%运算符 1.2 关系运算符1.3 逻辑运算符短路:逻辑非 1.4 位运算符&|^位运算符当作逻辑运算符中使用 ~>><<>>> 1.5 赋值运算符1.6 三目运算符 二 逻辑控制if语…...

JAVA前端快速入门基础_javascript入门(02)
写在前面:本文用于快速学会简易的JS,仅做扫盲和参考作用 1.JavaScript函数 什么是函数:执行特定任务的代码块 1.1定义: 使用function来进行定义(类似于python里面的def 或者java和c里面的void,int这些返回类型开头)。定义规则如下: func…...

【热门话题】ElementUI 快速入门指南
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 ElementUI 快速入门指南环境准备安装 ElementUI创建 Vue 项目安装 ElementUI 基…...
webpack4和webpack5区别4---自动清除打包目录
webpack4 自动清除打包目录 需要使用clean-webpack-plugin插件 const {CleanWebpackPlugin} require(clean-webpack-plugin); module.exports {plugins: [new CleanWebpackPlugin()} } webpack5 自动清除打包目录 module.exports {output: {clean: true} }...
npm许可证检查
node开发做项目,很少有人去纯手工打造,大多是采用一些开源框架,还会使用前人做好的轮子,所以咱们的项目文件里,除了自己编写的js文件,还会带有一些拿来主义的npm模块,从其他开源发布网站上下载的…...

利用AI大模型和Echarts 绘制知识图谱,实现文本信息提取和图数据库操作
引言 随着信息时代的到来,海量的文本数据成为了我们获取知识的重要来源。然而,如何从这些文本数据中提取出有用的信息,并将其以可视化的方式展示出来,一直是一个具有挑战性的问题。近年来,随着人工智能技术的发展&…...
Telegram电报+86手机接收验证码及账号解封方法
Telegram电报86手机无法接受验证码目前可用Telegram X获取,测试可用。获取验证码的前提是需要确保网络通畅 不要同一时段获取超过太多验证码,获取过多验证码将会很长一段时间收不到验证码,6小时最多获取2次验证码。 方法1:使用官…...

迅饶科技 X2Modbus 网关 AddUser 任意用户添加漏洞复现
0x01 产品简介 X2Modbus是上海迅饶自动化科技有限公司Q开发的一款功能很强大的协议转换网关, 这里的X代表各家不同的通信协议, 2是T0的谐音表示转换, Modbus就是最终支持的标准协议是Modbus协议。用户可以根据现场设备的通信协议进行配置,转成标准的Modbus协议。在PC端仿真…...

基于YOLOv8+PyQt5复杂场景下船舶目标检测系统
1. 应用场景 复杂场景下船舶目标检测系统的应用场景包括: 港口管理和安全:监控港口区域,确保船舶安全地进出港口,预防相撞事故的发生。 海洋交通监控:实时追踪海上交通流,并识别违规或异常航行行为&#x…...

Spring Boot | Spring Security ( SpringBoot安全管理 )、Spring Security中 的 “自定义用户认证“
目录 : Spring Boot 安全管理 :一、Spring Security 介绍二、Spring Security 快速入门2.1 基础环境搭建 :① 创建Spring Boot 项目② 创建 html资源文件③ 编写Web控制层 2.2 开启安全管理效果测试 :④ 添加 spring-boot-starter-security 启动器⑤ 项目启动测试 三…...
力扣经典150题第五十五题:逆波兰表达式求值
目录 题目描述和要求示例解释解题思路算法实现复杂度分析测试和验证总结和拓展参考资料 题目描述和要求 给你一个字符串数组 tokens,表示一个根据逆波兰表示法表示的算术表达式。请你计算该表达式,并返回一个表示表达式值的整数。 注意: 有…...

C#队列(Queue)的基本使用
概述 在编程中,队列(Queue)是一种常见的数据结构,它遵循FIFO(先进先出)的原则。在C#中,.NET Framework提供了Queue<T>类,它位于System.Collections.Generic命名空间下&#x…...

预训练模型介绍
一、什么是GPT GPT 是由人工智能研究实验室 OpenAI 在2022年11月30日发布的全新聊天机器人模型, 一款人工智能技术驱动的自然语言处理工具 它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动,能完成撰写邮件、视频脚本、文案、翻译、代码等任务 二、 为…...

Pandas入门篇(三)-------数据可视化篇3(seaborn篇)(pandas完结撒花!!!)
目录 概述一、语法二、常用单变量绘图1. 直方图(histplot)2. 核密度预估图(kdeplot)3. 计数柱状图(countplot) 三、常用多变量绘图1.散点图(1) scatterplot(2)regplot 散点图拟合回归线(3)jointplot 散点图…...

SpringBoot中阿里OSS简单使用
官方文档:Java跨域设置实现跨域访问_对象存储(OSS)-阿里云帮助中心 1.pom中引入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency> 如…...
websocket简介
服务端推送消息给浏览器 WebSocket 教程 - 阮一峰的网络日志...
Linux的shell外壳
Shell外壳 在计算机领域,“shell”(外壳)是指一种用户界面,提供了访问操作系统服务的方式。Shell 是用户与操作系统之间的桥梁,它解释并执行用户输入的命令。 Shell 的主要功能包括: 命令解释:…...

支付宝支付流程
第一步前端:点击去结算,前端将商品的信息传递给后端,后端返回一个商品的订单号给到前端,前端将商品的订单号进行存储。 对应的前端代码:然后再跳转到支付页面 // 第一步 点击去结算 然后生成一个订单号 // 将选中的商…...
打招呼得不到回复,跟头像还有关系?
现在很多人有个想法,那就是觉得某些公司是不是为了某些目的才往出发的招聘信息啊,其实他们并不需要招聘新员工。 目录 已读不回? 头像很重要 选择自己的精修照片 已读不回? 很有这种可能,但你细心观察会发现,的确有很多大公司,...

【网络原理】HTTPS 的工作过程
系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 【网络…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...