当前位置: 首页 > news >正文

Java基础入门篇——Java变量类型的转换和运算符(七)

目录

一、变量类型 

1.1自动类型转换(隐式转换)

1.2 强制类型转换(显式转换)

1.3类型转换的其他情况

二、运算符

2.1算术运算符

2.2比较运算符

2.3逻辑运算符

2.4位运算符

三、总结


在Java中,变量类型的转换可以分为两种:自动类型转换(隐式转换)和强制类型转换(显式转换)。

一、变量类型 

1.1自动类型转换(隐式转换)

当两种不同的数据类型在一个表达式中一起使用时,Java会自动将其中一个类型转换为另一个类型,以确保数据不会丢失。这种转换通常发生在小的数据类型向大的数据类型转换的情况下。

规则: 

示例

int i = 10;
double d = i;  // i被自动转换为double类型

1.2 强制类型转换(显式转换)

当你需要将一个大的数据类型转换为一个小的数据类型时,或者在其他不支持自动类型转换的情况下,你需要使用强制类型转换。

这是通过将目标类型放在括号中并放在要转换的变量前面来实现的。

示例

double d = 10.5;
int i = (int) d;  // d被强制转换为int类型,小数部分被丢弃

注意

  • 强制类型转换可能会导致数据丢失或不精确的结果。
  • 当将浮点数转换为整数时,小数部分将被丢弃。
  • 当将一个超出目标类型范围的值转换为该类型时,结果可能是不确定的。

1.3类型转换的其他情况

包装类

Java为每个基本数据类型提供了一个对应的包装类,如IntegerintDoubledouble等。你可以使用这些包装类的方法来进行类型转换,例如Integer.parseInt("123")将字符串转换为整数。

字符串转换

几乎所有的数据类型都可以通过toString()方法或String.valueOf()方法转换为字符串。

总的来说,当进行类型转换时,应该始终注意可能的数据丢失或不精确的结果,并确保转换是安全的。

二、运算符

2.1算术运算符

与算术相关运算符+、-、*、/,就是加减乘除,也被成为四则运算。另外还有一个%称为模数运算符或余数运算符。算术运算符使用上和学过的加减乘除一样,先乘除后加减。 

在Java中,算术运算符用于执行基本的数学运算。以下是Java中的主要算术运算符: 

1、加法 (+):将两个操作数相加。

int sum = 5 + 3;  // 结果是8

2、减法 (-):从左操作数中减去右操作数。

int difference = 5 - 3;  // 结果是2

3、乘法 (*):将两个操作数相乘。

int product = 5 * 3;  // 结果是15

4、除法 (/):左操作数除以右操作数。如果两个操作数都是整数,结果也是整数,小数部分会被丢弃。

int quotient = 7 / 3;  // 结果是2
double result = 7.0 / 3;  // 结果是2.3333...

5、取模 (或取余) (%):返回左操作数除以右操作数的余数。

int remainder = 7 % 3;  // 结果是1

6、自增 (++):增加操作数的值。可以前置或后置。

int a = 5;
a++;  // a的值现在是6

7、自减 (--):减少操作数的值。可以前置或后置。

int b = 5;
b--;  // b的值现在是4

注意

  • 当使用整数进行除法运算时,结果将是整数,小数部分会被丢弃。要获得浮点结果,至少有一个操作数应该是浮点数。
  • 自增和自减运算符可以前置或后置,它们在某些情况下的行为是不同的。例如,a++++a在单独使用时效果相同,但在表达式中使用时会有所不同。

总的来说,算术运算符在Java中提供了执行基本数学运算的功能,它们是编程中最常用的运算符之一。

2.2比较运算符

比较运算符用于比较两个值。这些运算符返回一个布尔值,即truefalse,取决于比较的结果。 

以下是Java中的主要比较运算符:

1、等于 (==):检查两个操作数是否相等。

int a = 5;
boolean result = (a == 5);  // 结果是true

2、不等于 (!=):检查两个操作数是否不相等。

int b = 6;
boolean result = (b != 5);  // 结果是true

3、大于 (>):检查左操作数是否大于右操作数。

int c = 7;
boolean result = (c > 5);  // 结果是true

4、小于 (<):检查左操作数是否小于右操作数。

int d = 4;
boolean result = (d < 5);  // 结果是true

5、大于或等于 (>=):检查左操作数是否大于或等于右操作数。

int e = 5;
boolean result = (e >= 5);  // 结果是true

6、小于或等于 (<=):检查左操作数是否小于或等于右操作数。

int f = 4;
boolean result = (f <= 5);  // 结果是true

注意

  • 使用==运算符比较对象引用时,它检查两个引用是否指向内存中的同一个对象,而不是检查对象的内容是否相等。要检查两个对象的内容是否相等,通常使用对象的equals()方法。

2.3逻辑运算符

逻辑运算符用于基于一个或多个布尔表达式的值来返回一个布尔结果(truefalse)。 

例如: 

1、逻辑与 (&&):当且仅当两个操作数都为true时返回true

boolean result = (true && true);  // 结果是true

2、逻辑或 (||):当至少一个操作数为true时返回true

boolean result = (true || false);  // 结果是true

3、逻辑非 (!):反转操作数的逻辑状态。如果操作数为true,则返回false,反之亦然。

boolean result = !true;  // 结果是false

4、逻辑异或 (^):当两个操作数有一个(但不是两个)为true时返回true

boolean result = (true ^ false);  // 结果是true

注意

  • &&||运算符是短路运算符。这意味着它们不总是评估它们的两个操作数。例如,对于&&,如果左操作数为false,则整个表达式的结果必定为false,因此右操作数不会被评估。对于||,如果左操作数为true,则整个表达式的结果必定为true,因此右操作数不会被评估。
  • ^运算符在用于整数类型时是按位异或,但当用于布尔类型时,它表示逻辑异或。

逻辑运算符在编程中非常有用,尤其是在条件语句和循环中,它们允许你基于多个条件来做决策或控制程序的流程。

2.4位运算符

位运算符是对二进制数的每一位进行运算的符号,它是专门对数字0和1进行操作。 

 例如:

 1、按位与 (&):如果两个相应的二进制位都为1,则结果为1,否则为0。

int result = 5 & 3;  // 5的二进制表示为101,3的二进制表示为011,所以结果是1

2、按位或 (|):如果两个相应的二进制位中至少有一个为1,则结果为1,否则为0。

int result = 5 | 3;  // 5的二进制表示为101,3的二进制表示为011,所以结果是7

3、按位异或 (^):如果两个相应的二进制位不同,则结果为1,否则为0。

int result = 5 ^ 3;  // 5的二进制表示为101,3的二进制表示为011,所以结果是6

4、按位非 (~):反转所有的二进制位。

int result = ~5;  // 5的二进制表示为101,反转后为010,所以结果是-6(考虑到二进制的补码表示)

5、左移 (<<):将左操作数的值向左移动右操作数指定的位数。右边空出的位用零填充。

int result = 5 << 1;  // 5的二进制表示为101,左移一位后为1010,所以结果是10

6、右移 (>>):将左操作数的值向右移动右操作数指定的位数。对于正数,左边空出的位用零填充;对于负数,左边空出的位用一填充。

int result = 5 >> 1;  // 5的二进制表示为101,右移一位后为10,所以结果是2

7、无符号右移 (>>>):将左操作数的值向右移动右操作数指定的位数。左边空出的位用零填充,不考虑符号。

int result = -5 >>> 1;  // 结果是一个非常大的正数

位运算符在某些特定的应用中非常有用,如图形处理、加密和低级编程任务。由于它们直接操作二进制位,所以通常比其他算术或逻辑运算符更快。

三、总结

本文主要介绍了数据类型的转换分别有自动类型转换和强制类型转换,也介绍了这两种类型转换的用法,需要注意的是强制类型转换可能造成信息的丢失。

运算符包括了算术运算符、比较运算符、逻辑运算符、位运算符。算术运算符是+、-、*、\,还有%模数运算符或余数运算符。详细介绍了自增和自减的用法。比较运算符是对两个数值或变量进行比较,结果是一个布尔值true或false。

逻辑运算符对布尔型的数据进行操作,结果也是一个布尔值。位运算符是对二进制数的每一位进行运算的符号,它是专门对数字0和1进行操作。希望通过本文的学习,能够帮助到你理解数据类型转换和运算符。

相关文章:

Java基础入门篇——Java变量类型的转换和运算符(七)

目录 一、变量类型 1.1自动类型转换&#xff08;隐式转换&#xff09; 1.2 强制类型转换&#xff08;显式转换&#xff09; 1.3类型转换的其他情况 二、运算符 2.1算术运算符 2.2比较运算符 2.3逻辑运算符 2.4位运算符 三、总结 在Java中&#xff0c;变量类型的转换…...

20230807通过ffmpeg将DTS编码的AUDIO音频转换为AAC编码

20230807通过ffmpeg将DTS编码的AUDIO音频转换为AAC编码 2023/8/7 20:04 ffmpeg dts 转AAC 缘起&#xff1a;由于网上找的电影没有中文字幕&#xff0c;有内置的英文字幕&#xff0c;但是还是通过剪映/RP2023识别一份英文字幕备用&#xff01; I:\Downloads\2005[红眼航班]Red E…...

一生一芯1——windows与Ubuntu双系统安装

UltraISO下载 下载链接&#xff1a;https://pan.baidu.com/s/18ukDs6yL64qU6thYyZEo-Q?pwdo8he 提取码&#xff1a;o8he 一路傻瓜安装&#xff0c;安装后点击继续试用 Ubuntu系统下载 这里我使用的是官网的22.04版本&#xff0c;由于大于4G&#xff0c;无法上传至百度网盘…...

Linux下的CGI服务器

一、概述 使用进程池&#xff0c;半同步/半异步并发模式。 同步进程&#xff1a;工作子进程负责进行具体的连接以及具体的I/O&#xff0c;顺序执行 异步进程&#xff1a;主进程监听连接事件&#xff0c;将连接任务分发给子线程 二、设计逻辑 1.设计进程池的创建逻辑 2.父…...

后端开发3.Fastdfs的搭建

使用Docker安装 拉取镜像 docker pull registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs 启动容器(修改ip)【fastdfs/自启动】(22122/23000/8888) docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=你的ip地址 -e WEB_PORT=8888 -v …...

目标检测与跟踪 (3)- TensorRTYOLO V8性能优化与部署测试

系列文章目录 目标检测与跟踪 &#xff08;1&#xff09;- 机器人视觉与YOLO V8_Techblog of HaoWANG的博客-CSDN博客 目标检测与跟踪 &#xff08;2&#xff09;- YOLO V8配置与测试_Techblog of HaoWANG的博客-CSDN博客 目录 系列文章目录 前言 YOLO v8 TensorRT 一、…...

SAS-数据集SQL垂直(纵向)合并

一、SQL垂直合并的基本语法 一个selectt对应一个表&#xff0c;select之间用set-operator连接&#xff0c;set-operator包括&#xff1a;except&#xff08;期望&#xff09;、intersect&#xff08;相交&#xff09;、union&#xff08;合并&#xff09;&#xff0c;outer un…...

SpringBoot3 整合Prometheus + Grafana

通过Prometheus Grafana对线上应用进行观测、监控、预警… 健康状况【组件状态、存活状态】Health运行指标【cpu、内存、垃圾回收、吞吐量、响应成功率…】Metrics… 1. SpringBoot Actuator 1. 基本使用 1. 场景引入 <dependency><groupId>org.springframew…...

Python实现GA遗传算法优化LightGBM回归模型(LGBMRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…...

【基于IDEA + Spark 3.4.1 + sbt 1.9.3 + Spark MLlib 构建逻辑回归鸢尾花分类预测模型】

逻辑回归进行鸢尾花分类的案例 背景说明&#xff1a; 基于IDEA Spark 3.4.1 sbt 1.9.3 Spark MLlib 构建逻辑回归鸢尾花分类预测模型&#xff0c;这是一个分类模型案例&#xff0c;通过该案例&#xff0c;可以快速了解Spark MLlib分类预测模型的使用方法。 依赖 ThisBui…...

资深测试老鸟整理,性能测试-常见调优详细,卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 常见的一些性能缺…...

【第五章 flutter学习之flutter进阶组件-上篇】

文章目录 一、列表组件1.常规列表2.动态列表 二、FridView组件三、Stack层叠组件四、AspectRatio Card CircleAvatar组件五、按钮组件六、Stack组件七、Wrap组件八、StatefulWidget有状态组件总结 一、列表组件 1.常规列表 children: const <Widget>[ListTile(leading: …...

鸿蒙边缘计算网关正式开售

IDO-IPC3528鸿蒙边缘计算网关基于RK3568研发设计&#xff0c;采用22nm先进工艺制程&#xff0c;四核A55 CPU&#xff0c;主频高达2.0GHz&#xff0c;支持高达8GB高速LPDDR4&#xff0c;1T算力NPU&#xff0c;4K H.265/H264硬解码&#xff1b;视频输出接口HDMI2.0&#xff0c;双…...

Bytebase 2.5.0 - VCS 集成支持 Azure DevOps,支持达梦数据库

&#x1f680; 新功能 VCS 集成支持 Azure DevOps。研发版本支持达梦数据库。允许用户设置需要重新登录的频率。支持选择并导出数据库变更历史。新增 MySQL Schema 设计器。支持字段模板库。 &#x1f384; 改进 在 SQL 编辑器中&#xff0c;优化 MongoDB 的查询结果。优化 …...

tomcat通过systemctl启动时报错Cannot find /usr/local/tomcat/bin/setclasspath.sh

解决方法&#xff0c;检查自己的CATALINA_HOME和TOMCAT_HOME配置情况 我的配置在/etc/profile下的如下 使其立即生效 后将/usr/lib/systemd/system/tomcat.service中的CATALINA_HOME和TOMCAT_HOME和/etc/profile改一致 重新加载再重启解决 解决方法&#xff0c;检查自己的C…...

Django架构图

1. Django 简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架 使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能的 Web 服务 Django 本身…...

vue- 创建wms-web项目

vue 发展历程 安装vite 第一步 创建wms-web项目 第二步 打开文件夹并安装所有开发环境的依赖 都可以放静态资源 public>vite.svg 不会重新编译成其他名字 assets>vue.svg 会重新编译成一个随机的名称 重新编译 启动 第三步 spa 单页渲染 第四步 安装路由 第五步 …...

集成学习:机器学习模型如何“博采众长”

前置概念 偏差 指模型的预测值与真实值之间的差异&#xff0c;它反映了模型的拟合能力。 方差 指模型在不同的训练集上产生的预测结果的差异&#xff0c;它反映了模型的稳定性。 方差和偏差对预测结果所造成的影响 在机器学习中&#xff0c;我们通常希望模型的偏差和方差都…...

排序算法(二)

1.希尔排序-Shell Sort 1.算法原理 将未排序序列按照增量gap的不同分割为若干个子序列&#xff0c;然后分别进行插入排序&#xff0c;得到若干组排好序的序列&#xff1b; 缩小增量gap&#xff0c;并对分割为的子序列进行插入排序&#xff1b;最后一次的gap1&#xff0c;即整个…...

CVPR 2023 | 无监督深度概率方法在部分点云配准中的应用

注1:本文系“计算机视觉/三维重建论文速递”系列之一,致力于简洁清晰完整地介绍、解读计算机视觉,特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, NeurIPS, ICLR, ICML, TPAMI, IJCV 等)。本次介绍的论文是:2023年,CVPR,…...

HTTP隧道识别与防御:机器学习的解决方案

随着互联网的快速发展&#xff0c;HTTP代理爬虫已成为数据采集的重要工具。然而&#xff0c;随之而来的是恶意爬虫对网络安全和数据隐私的威胁。为了更好地保护网络环境和用户数据&#xff0c;我们进行了基于机器学习的HTTP代理爬虫识别与防御的研究。以增强对HTTP代理爬虫的识…...

【MMU】认识 MMU 及内存映射的流程

MMU&#xff08;Memory Manager Unit&#xff09;&#xff0c;是内存管理单元&#xff0c;负责将虚拟地址转换成物理地址。除此之外&#xff0c;MMU 实现了内存保护&#xff0c;进程无法直接访问物理内存&#xff0c;防止内存数据被随意篡改。 目录 一、内存管理体系结构 1、…...

Clion开发Stm32之存储模块(W25Q64)驱动编写

前言 涵盖之前文章: Clion开发STM32之HAL库SPI封装(基础库) W25Q64驱动 头文件 #ifndef F1XX_TEMPLATE_MODULE_W25Q64_H #define F1XX_TEMPLATE_MODULE_W25Q64_H#include "sys_core.h" /* Private typedef ---------------------------------------------------…...

SpringBoot动态切换数据源

SpringBoot整合多数据源&#xff0c;动态添加新数据源并切换 1.需求2.创建数据源配置类3.切换数据源4.切换数据源管理类5.使用案例5.AOP切面拦截 1.需求 低代码服务需要给多套系统进行功能配置&#xff0c;要求表结构必须生成在对应系统的数据库中&#xff0c;所以表结构的生成…...

[C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...

有关Boost文档搜索引擎的项目的前三篇文章, 已经分别介绍分析了: 项目背景: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: &#x1fae6;[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…...

SAP ABAP元素域值描述通过函数(DD_DOMVALUE_TEXT_GET)获取

代码如下&#xff1a; PERFORM FRM_GET_DOMVALUE_TEXT USING ZMMD_ZFLZQ <GFS_DATA>-ZFLZQ CHANGING <GFS_DATA>-ZZQTEXT .IF <GFS_DATA>-ZXYLX IS NOT INITIAL .PERFORM FRM_GET_DOMVALUE_TEXT USING ZMMD_ZXYLX <GFS_DATA>-ZXYLX CHANGING <GFS_…...

原型模式与享元模式:提升系统性能的利器

原型模式和享元模式&#xff0c;前者是在创建多个实例时&#xff0c;对创建过程的性能进行调优&#xff1b;后者是用减 少创建实例的方式&#xff0c;来调优系统性能。这么看&#xff0c;你会不会觉得两个模式有点相互矛盾呢&#xff1f; 在有些场景下&#xff0c;我们需要重复…...

uniapp封装手写签名

组件代码 cat-signature <template><view v-if"visibleSync" class"cat-signature" :class"{visible:show}" touchmove.stop.prevent"moveHandle"><view class"mask" tap"close" /><view c…...

掌握 JVM 调优命令

常用命令 1、jps查看当前 java 进程2、jinfo实时查看和调整 JVM 配置参数3、jstat查看虚拟机统计信息4、jstack查看线程堆栈信息5、jmap查看堆内存的快照信息 JVM 日常调优总结起来就是&#xff1a;首先通过 jps 命令查看当前进程&#xff0c;然后根据 pid 通过 jinfo 命令查看…...

扩增子分析流程——Lotus2: 一行命令完成所有分析

为什么介绍lotus2 因为快&#xff0c;作者比较了lotus2流程和qiime2、dada2、vsearch等&#xff0c;lotus2的速度最快、占用内存最小。 因为方便&#xff0c;只需要一行代码&#xff0c;即可完成全部分析。 lotus2 -i Example/ -m Example/miSeqMap.sm.txt -o myTestRun而且分…...