当前位置: 首页 > 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,…...

UE5模型加载避坑指南:为什么你的Runtime OBJ导入总是丢失材质?

UE5运行时OBJ材质丢失终极解决方案&#xff1a;从原理到工具函数全解析 当你在UE5中动态加载OBJ模型时&#xff0c;是否遇到过这样的场景&#xff1a;模型虽然成功加载&#xff0c;但所有材质都变成了难看的粉色默认材质&#xff1f;这可能是技术美术和程序化生成领域最常见的痛…...

ASCII码表深度解析:从基础到扩展的全面指南

1. ASCII码的前世今生&#xff1a;计算机世界的通用语言 第一次接触ASCII码是在大学计算机基础课上&#xff0c;教授用"65A"这个简单公式瞬间点燃了我的好奇心。这个看似简单的编码系统&#xff0c;实际上是现代数字通信的基石。ASCII&#xff08;American Standard …...

【亲测有效】绕开收费陷阱!教你免费安装H.265/HEVC解码器,告别视频播放“绿屏”

最近在处理一些4K视频素材时&#xff0c;又遇到了老生常谈的问题——Windows 10/11无法播放H.265编码的视频&#xff0c;提示“缺少编解码器”。 大家都知道&#xff0c;解决办法是安装那个名为“HEVC 视频扩展”的微软官方插件。 然而&#xff0c;当我满怀信心地打开Microsof…...

【技术选型指南】Avalonia、MAUI、Uno Platform、Flutter、Electron、Qt与Tauri:从场景到决策的深度剖析

1. 跨平台框架选型的核心考量因素 当你准备启动一个新项目或重构现有技术栈时&#xff0c;面对琳琅满目的跨平台框架&#xff0c;选择困难症很容易发作。我经历过多次这样的技术决策过程&#xff0c;发现关键在于先明确项目的核心需求。就像装修房子前要先确定是想要北欧简约风…...

GEE实战:MODIS NDVI数据高效获取与自动化处理全流程

1. 从零开始认识MODIS NDVI数据 第一次接触遥感数据分析的朋友可能会被各种专业术语搞得晕头转向。别担心&#xff0c;我们先来聊聊这个"MODIS NDVI"到底是什么。简单来说&#xff0c;NDVI&#xff08;归一化差值植被指数&#xff09;就像是给地球做体检的"体温…...

DeOldify API速率限制:令牌桶算法实现每用户每小时1000次调用

DeOldify API速率限制&#xff1a;令牌桶算法实现每用户每小时1000次调用 1. 为什么需要API速率限制 在构建基于DeOldify的图像上色服务时&#xff0c;我们面临一个重要的技术挑战&#xff1a;如何公平合理地分配计算资源。深度学习模型推理需要消耗大量的GPU计算资源&#x…...

从F1 90到62 F1 90:用Wireshark和CANoe‘解剖’一次完整的UDS 0x22数据读取会话

从F190到62F190&#xff1a;用Wireshark和CANoe解剖UDS 0x22数据读取会话 当你第一次在Wireshark中看到22服务请求和62响应报文时&#xff0c;那些十六进制字节可能就像天书一样难以理解。但正是这些看似杂乱的数据流&#xff0c;承载着现代汽车电子系统最核心的诊断信息交换。…...

FastAdmin二次开发指南:如何基于这套开源CMS源码定制你的专属内容模型?

FastAdmin二次开发实战&#xff1a;从零构建自定义内容模型 在开源CMS领域&#xff0c;FastAdmin以其基于ThinkPHP的优雅架构和丰富的功能模块&#xff0c;成为众多开发者快速构建后台管理系统的首选。但真正体现其价值的&#xff0c;往往是在面对个性化业务需求时的二次开发能…...

跨平台OCR新利器:PP-OCRv5模型转ONNX实战指南,轻松应对多语言识别挑战

1. 为什么需要跨平台OCR解决方案 在日常工作和生活中&#xff0c;我们经常会遇到需要处理多语言文档的场景。比如收到一份包含中文、英文和日文的合同&#xff0c;或者需要从产品包装上识别不同语言的说明文字。传统OCR方案往往需要针对不同语言训练多个模型&#xff0c;不仅部…...

Spark 4.0 新特性Python Data Source API 快速上手

1. 什么是 Python Data Source API Python Data Source API 是 Spark 4.0 引入的新能力&#xff0c;它允许开发者在 Python 中直接实现自定义数据源和数据写出逻辑。换句话说&#xff0c;你可以像实现一个插件一样&#xff0c;为 Spark 增加新的读取来源和写出目标&#xff0c;…...