基本概念【算术、 关系、逻辑、位、字符串、条件、优先级等运算符】(三)-全面详解(学习总结---从入门到深化)

news2025/1/20 20:14:09

文章目录

运算符(operator) 

算术运算符

赋值及其扩展赋值运算符

 关系运算符

逻辑运算符

位运算符

 字符串连接符

条件运算符

 运算符优先级的问题

数据类型的转换

自动类型转换

强制类型转换

Scanner 处理键盘输入


运算符(operator) 

计算机的基本用途就是执行数学运算,Java 提供了一套丰富的运算符来操作变量。
 

算术运算符(二元运算符)+,-,*,/,%
算术运算符(一元运算符)++,--
赋值运算符=
扩展运算符+=,-=,*=,/=
关系运算符>,<,>=,<=,==,!= instanceof
逻辑运算符 &&,||,!,^
位运算符&,|,^,~ , >>,<<
条件运算符? :
字符串连接符+

算术运算符

 1. +,-,*,/,%属于二元运算符。%是取模运算符,就是我们常说的求余数操作。
2. 算术运算符中++(自增)--(自减)属于一元运算符。

二元运算符的运算规则:
        整数运算:
                 如果两个操作数有一个为 long, 则结果也为 long
                 没有 long 时,结果为 int。即使操作数全为 short,byte,结果也是 int
        浮点运算:
                 如果两个操作数有一个为 double,则结果为 double
                 只有两个操作数都是 float,则结果才为 float。
        取模运算:
                 其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作相同,如:7%3=1,-7%3=-1,7%-3=1

 【示例】一元运算符++与--

int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
System.out.println("a="+a+"\nb="+b);
a = 3;
b = ++a; //执行完后,b=4。a先自增,再给b赋值
System.out.println("a="+a+"\nb="+b);

运行该程序,执行结果如图2-3所示。
 

 运行效果图

赋值及其扩展赋值运算符

运算符用法举例等效的表达式
+= a += ba = a+b
-=a -= ba = a-b
*=a *= ba = a*b
/=a /= b a = a/b
%=a %= b a = a%b

【示例 2-21】扩展运算符
 

int a=3;
int b=4;
a+=b;//相当于a=a+b;
System.out.println("a="+a+"\nb="+b);
a=3;
a*=b+3;//相当于a=a*(b+3)
System.out.println("a="+a+"\nb="+b);

 图 2-4 示例 2-21 运行效果图

 关系运算符

关系运算符用来进行比较运算。关系运算的结果是布尔值:true/false

运算符含义示例
==等于a==b
!= 不等于 a!=b
小于a<b
>大于a>b
>=大于或等于 a>=b
<=小于或等于a<=b

注意事项
= 是赋值运算符,而真正的判断两个操作数是否相等的运算符是==
==、!= 是所有(基本和引用)数据类型都可以使用。
> 、>=、 <、 <= 仅针对数值类型(byte/short/int/long,float/double 以及 char)。

逻辑运算符
 

 逻辑运算的操作数和运算结果都是 boolean 值。

运算符运算符说明
&只要有一个为 false,则 false
短路与&&只要有一个为 false,则 false
或 |只要有一个为 true, 则 true
短路或||只要有一个为 true, 则 true
取反
异或相同为 false,不同为 true

短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能
够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。
 

【示例 2-22】短路与和逻辑与

//1>2 的结果为 false,那么整个表达式的结果即为 false,将不再计算 2>(3/0)
boolean c = 1>2 && 2>(3/0);
System.out.println(c);
//1>2 的结果为 false,那么整个表达式的结果即为 false,还要计算 2>(3/0),0 不能做除
数,//会输出异常信息
boolean d = 1>2 & 2>(3/0);
System.out.println(d);

位运算符

位运算指的是进行二进制位的运算。
 

位运算符 说明
~取反
&按位与
|按位或
按位异或
<<左移运算符,左移 1 位相当于乘 2
>>右移运算符,右移 1 位相当于除 2 取商

【示例 2-23】左移运算和右移运算

int a = 3*2*2;
int b = 3<<2; //相当于:3*2*2;
int c = 12/2/2;
int d = 12>>2; //相当于 12/2/2;

新手雷区
 &和|既是逻辑运算符,也是位运算符。如果两侧操作数都是 boolean 类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。
 不要把“^”当做数学运算“乘方”,是“位的异或”操作。

 字符串连接符

 “+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。

【示例 2-24】连接符“+”
 

int a=12;
System.out.println("a="+a);//输出结果: a=12

条件运算符

String type = score<60?"不及格":"及格";

xboolean 类型表达式,先计算 x 的值,若为 true,则整个运算的结果为表达式 y
值,否则整个运算结果为表达式 z 的值。

【示例 2-25】条件运算符
 

int score = 80; 
int x = -100;
String type =score<60?"不及格":"及格"; 
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " + type);
System.out.println("flag= "+ flag);

运行结果如图 2-5 所示。
 

 运算符优先级的问题

运算符的优先级

优先级运算符
1() 括号运算符
2!、+(正号)、-(负号) 一元运算符
2位逻辑运算符
2++、-- 递增与递减运算符
3*、/、%算术运算符
4+、-算术运算符
5<<、>> 位左移、右移运算符
6>、>=、<、<=关系运算符
7==、!=关系运算符
8&位运算符、逻辑运算符
9^位运算符、逻辑运算符
10|位运算符、逻辑运算符
11&&逻辑运算符
12||逻辑运算符
优先级 运算符
13? :条件运算符
14=、+=、-=、*=、/=、%=赋值运算符、扩展运算符

小童建议
 大家不需要去刻意的记这些优先级,表达式里面优先使用小括号来组织!!
 逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非>逻辑与>逻辑或)。如:
a||b&&c 的运算结果是:a||(b&&c),而不是(a||b)&&c

数据类型的转换


我们讲解了八种基本数据类型,除了 boolean 类型之外的七种类型是可以自动转化的。

自动类型转换

自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图 2-6 所
示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。

 可以将整型常量直接赋值给 byte、 short、 char 等类型变量,而不需要进行强制类型
转换,只要不超出其表数范围即可。

【示例 2-26】自动类型转换特例
 

short b = 12; //合法
short b = 1234567; //非法,1234567 超出了 short 的表数范围

强制类型转换


 

 (type) var

 强制类型转换,又称为造型(cast),用于强制转换数值的类型,可能损失精度。

【示例 2-27】强制类型转换
 

double x = 3.94; 
int nx = (int)x; //值为 3
char c = 'a';
int d = c+1;
System.out.println(nx);
System.out.println(d);
System.out.println((char)d);

运行结果如图 2-7 所示。
 

 当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成
为一个完全不同的值。

【示例 2-28】强制类型转换特例

int x = 300;
byte bx = (byte)x; //值为 44

新手雷区
 不能在布尔类型和任何数值类型之间做强制类型转换

基本类型转化时常见错误和问题
 

 1. 操作比较大的数时,要留意是否溢出,尤其是整数操作时。
2. L 和 l 的问题:
        (1) 不要命名名字为 l 的变量,字母 l 容易和数字 1 混淆。
        (2) long 类型使用大写 L,不要用小写 l。

【示例】类型转换常见问题一

int money = 1000000000; //10亿
int years = 20;
//返回的total是负数,超过了int的范围
int total = money*years;
System.out.println("total="+total);
//返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生//了数据丢失
long total1 = money*years; 
System.out.println("total1="+total1);
//返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。
long total2 = money*((long)years); 
System.out.println("total2="+total2);

运行结果如图所示。

 【示例】类型转换常见问题二

int l = 2; //分不清是L还是1,
long a = 23451l;//建议使用大写L
System.out.println(l+1);

Scanner 处理键盘输入

 Scanner 让程序和用户通过键盘交互

【示例】使用 Scanner 获取键盘输入

import java.util.Scanner;
public class Welcome2 {
        public static void main(String[ ] args) {
        Scanner scanner = new Scanner(System.in);
        // 将输入的一行付给 string1
        String string1 = scanner.nextLine();
        // 将输入单词到第一个空白符为止的字符串付给 string2
        String string2 = scanner.next();
        // 将输入的数字赋值给变量
        int a = scanner.nextInt();
        System.out.println("-----录入的信息如下-------");
        System.out.println(string1);
        System.out.println(string2);
        System.out.println(a * 10);
    }
}

运行结果如图 2-9 所示。

 图 2-9 示例 2-31 运行效果图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例(2)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

每日一题 113路径总和||(递归)

题目 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22…

脱离束缚:数字化工厂中ARM控制器的革命性应用!

近年来&#xff0c;中国数字经济体系已进入高速增长阶段。制造业作为中国经济高质量发展的重要支撑力量&#xff0c;在面临生产成本不断上涨、关键装备和核心零部件“受制于人”等挑战时&#xff0c;建设数字化工厂已成必然。 数字化工厂数据采集出现的问题 在数字工厂的建设…

两个步骤让图片动起来!

在当今数字时代&#xff0c;动态图片已经成为了网页设计和移动应用设计的标配之一。动态图片能够吸引用户的注意力&#xff0c;提高用户体验和页面交互性。那么&#xff0c;图片怎么动起来&#xff1f;有什么好用的方法呢&#xff1f;下面我们来一起探讨一下。 通常我们认知的动…

【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构

MinIO背景介绍 MinIO创始者是Anand Babu Periasamy, Harshavardhana&#xff08;戒日王&#xff09;等人&#xff0c; Anand是GlusterFS的初始开发者、Gluster公司的创始人与CTO&#xff0c;Harshavardhana曾经是GlusterFS的开发人员&#xff0c;直到2011年红帽收购了Gluster公…

Web安全测试(三):SQL注入漏洞

一、前言 结合内部资料&#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程&#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试&#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬&#xff01; 全部…

IDEA启动两个Tomcat服务的方式 使用nginx进行反向代理 JMeter测试分布式情况下synchronized锁失效

目录 引出IDEA启动Tomcat两个端口的方式1.编辑配置2.添加新的端口-Dserver.port80833.service里面管理4.启动后进行测试 使用nginx进行反向代理反向代理多个端口运行日志查看启动关闭重启 分布式情况下synchronized失效synchronized锁代码启动tomcat两个端口nginx反向代理JMete…

实验七 Linux 内核移植

【实验目的】 掌握 Linux 内核配置和编译的基本方法 【实验环境】 ubuntu 14.04 发行版FS4412 实验平台交叉编译工具&#xff1a;arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行&#xff0c;以“#”开头的命令表 示在开发板下…

C++信息学奥赛1139:整理药名

#include <iostream> #include <string> using namespace std; int main() {int n;// 输入整数ncin>>n;cin.ignore();string arr[n];// 循环读取n行字符串for (int i 0; i<n ;i){getline(cin,arr[i]);}for (int i 0; i<n ;i){for(int j0;j<arr[i]…

【JSDocvscode】使用JSDoc、在vscode中开启node调试、使用vscode编写运行Python程序

JSDoc JSDoc是JavaScript的一种注释语法&#xff0c;同时通过JSDoc注释也可以规避js弱类型中不进行代码提示的问题 图形展示JSDoc的效果&#xff1a; 上述没有进行JSDoc&#xff0c;然后我们a点什么 是没有任何提示的 上述就是加上 JSDoc的效果 常用的 vscode 其实内置了 js…

IBM Spectrum LSF License Scheduler

LSF License Scheduler 提供了两个版本: Basic Edition 和 Standard Edition。 LSF License Scheduler Basic Edition 随附于 LSF Standard Edition 和 Advanced Edition &#xff0c;并非旨在应用有关如何在集群或项目之间共享许可证的策略。 相反&#xff0c; LSF License S…

[JavaWeb]【十四】web后端开发-MAVEN高级

目录 一、分模块设计与开发 1.1 分模块设计 1.2 分模块设计-实践​编辑 1.2.1 复制老项目改为spring-boot-management 1.2.2 新建maven模块runa-pojo 1.2.2.1 将原项目pojo复制到runa-pojo模块 1.2.2.2 runa-pojo引入新依赖 1.2.2.3 删除原项目pojo包 1.2.2.4 在spring-…

postman 调用webservice

有个外部接口需要提供古老的webservice 格式接口。 1 设置格式 按照xml 格式设置。 2 消息体xml 封装 不加envelope: <soap:Envelope xmlns:soap"" target"_blank">http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap…

硬盘中病毒是什么原因?硬盘格式化能清除病毒吗

“我的电脑中了一个非常顽固的病毒&#xff0c;朋友建议我进行硬盘格式化来彻底清除病毒。不知道是不是真的有用&#xff0c;半信半疑下进行了硬盘格式化。当我完成操作后&#xff0c;我发现有些工作文件没有备份到。这可怎么办&#xff1f;想问下大家有没有什么方法去恢复数据…

ClickHouse进阶(二):ClickHouse MergeTree表引擎及目录解析

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

【VS Code插件开发】消息通信(四)

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域优质作者、阿里云专家博主&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4e2; 资料领取&#xff1a;前端…

ModaHub魔搭社区:WinPlan垂直大模型数据采集

WinPlan经营大脑数据手动提交 数据采集模版创建后,用户可手动提交数据 数据批量导入 1、第一步:上传Excel 如何选择Excel本系统的批量导入支持选择任意相关的Excel,映射到数据采集模版的各列,即可实现批量导入;相关Excel可以是自行维护的相关数据、或从其他业务系统导出…

【C语言】文件操作 -- 详解

一、什么是文件 磁盘上的文件是文件。 1、为什么要使用文件 举个例子&#xff0c;当我们想实现一个 “通讯录” 程序时&#xff0c;在通讯录中新建联系人、删除联系人等一系列操作&#xff0c;此时的数据存储于内存中&#xff0c;程序退出后所有数据都会随之消失。为了让通讯录…

vue-admin-template实现按钮级控制

这里记录一下使用大佬的模板vue-admin-template&#xff0c;实现按钮级别控制 实现的思路&#xff1a;用户登录之后&#xff0c;返回用户详细信息(将用户的所有权限码发送给前端)&#xff0c;然后将权限码保存在全局状态管理对象中&#xff0c;然后在组件中进行判断是否显示 最…

JAVA学习-愚见

JAVA学习-愚见 分享一下Java的学习路线&#xff0c;仅供参考【本人亲测&#xff0c;真实有效】 1、尽可能推荐较新的课程 2、大部分视频在B站上直接搜关键词就行【自学&#xff0c;B大的学生】 文章目录 JAVA学习-愚见前期准备Java基础课程练手项目 数据库JavaWeb前端基础 Vue…