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

news2024/11/23 22:11:45

目录

一、变量类型 

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进行操作。希望通过本文的学习,能够帮助到你理解数据类型转换和运算符。

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

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

相关文章

\vendor\github.com\godror\orahlp.go:531:19: undefined: VersionInfo

…\goAdmin\vendor\github.com\godror\orahlp.go:531:19: undefined: VersionInfo 解决办法 降了go版本(go1.18)&#xff0c;之前是go1.19 gorm版本不能用最新的&#xff0c;降至&#xff08;gorm.io/gorm v1.21.16&#xff09;就可以 修改交插编译参数 go env -w CGO_ENABLED1…

机器学习深度学习—语言模型和数据集

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——文本预处理 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助 语…

订单系统就该这么设计,稳的一批~

订单功能作为电商系统的核心功能&#xff0c;由于它同时涉及到前台商城和后台管理系统&#xff0c;它的设计可谓是非常重要的。就算不是电商系统中&#xff0c;只要是涉及到需要交易的项目&#xff0c;订单功能都具有很好的参考价值&#xff0c;说它是通用业务功能也不为过。今…

单元测试最终结果为Stopped状态(有报错后不继续往下执行)

之前跑了一下项目的单元测试&#xff0c;但是发现一旦有报错后单元测试就不继续往下执行&#xff0c;而且最终的结果是stopped状态&#xff0c;截图如下&#xff1a; 经过排查是因为项目启动的时候有如下的代码&#xff1a; 通过代码可以发现如果项目启动失败&#xff0c;则直接…

如何用python画动漫人物,python画卡通人物代码

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python画动漫人物代码 星空&#xff0c;如何用python画动漫人物&#xff0c;现在让我们一起来看看吧&#xff01; 要寒假了&#xff0c;给孩子画一个卡通版蜘蛛侠 完整程序代码&#xff1a; from turtle import * speed…

鉴源实验室|公钥基础设施(PKI)在车联网中的应用

作者 | 付海涛 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 01 PKI与车联网 1.1 PKI概述 公钥基础设施&#xff08;PKI ,Public Key Infrastructure&#xff09;是一种在现代数字环境中实现认证和加密的基本框架&#xff0c;主要用于保护网络交互和通信的安…

新手教程:5步掌握系统流程图绘制方法!

流程图通常用于管理、分析、设计许多不同领域的流程&#xff0c;是一个很有用的工具&#xff0c;能够帮助大家更轻松、更有效地解决问题。系统流程图是流程图的常见变体之一。 系统流程图是展示数据流以及决策如何影响周围事件的图表类型。 与其他类型的流程图一样&#xff0c;…

【沁恒蓝牙mesh】CH58x USB功能开发记录(一)

本文主要介绍基于【沁恒蓝牙mesh】CH58x USB功能&#xff0c;结合SDK提供的代码包分析USB的基本常识 【沁恒蓝牙mesh】CH58x USB功能开发记录&#xff08;一&#xff09; 1. USB基本常识1.1 **USB 设备类别&#xff1a;**1.2 **USB设备实现方法&#xff1a;**1.3 **CDC设备&…

【我们一起60天准备考研算法面试(大全)-第三十九天 39/60】【序列型DP】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

PDF Expert 3.3 for mac

PDF Expert是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点&#xff1a; PDF编辑&#xff1a;PDF Expert提供了丰富的PDF编辑功能&#xff0c;包括添加、删除、移动、旋转、缩放、裁…

【2.2】Java微服务:Hystrix的详解与使用

目录 分布式系统面临问题 Hystrix概念 Hystrix作用 降级 什么是降级 order服务导入Hystrix依赖&#xff08;简单判断原则&#xff1a;谁调用远程谁加&#xff09; 启动类添加注解 业务方法添加注解&#xff08;冒号里填回调方法名&#xff0c;回调方法返回兜底数据&…

DETR不需要多尺度或局部性设计

文章目录 DETR Doesn’t Need Multi-Scale or Locality Design摘要本文方法Box-to-Pixel Relative Position Bias其他改进 实验结果 DETR Doesn’t Need Multi-Scale or Locality Design 摘要 提出了一种改进的DETR检测器&#xff0c;使用单尺度特征映射和全局交叉注意计算&a…

RFID系统数据编码方式仿真实现

RFID 技术简介 射频识别技术&#xff08;RFID&#xff0c;即&#xff0c;Radio Frequency Identification&#xff09;是一种非接触自动识别技术&#xff0c;它利用无线通信的方式自动的从目标中读取信息。   典型的RFID射频识别系统包括标签和读写器两部分。   标签是一块集…

学术资源加速

以下为可以加速访问的学术资源地址&#xff1a; github.comgithubusercontent.comgithubassets.comhuggingface.co 编辑 /etc/network_turbo vim /etc/network_turbo 内容格式参考如下&#xff1a; export no_proxylocalhost,127.0.0.1 export http_proxyhttp://127.0.0.…

5,二叉树【p6-p7】

二叉树 5.1二叉树5.1.1例1&#xff1a;用递归和非递归两种方式实现二叉树的先序、中序、后序遍历5.1.1.1递归序的先序、中序、后序遍历先序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a; 5.1.1.2非递归序的先序、中序、后序遍历先序遍历&#xff1a;中序遍历&…

基于Java+SpringBoot+Vue的时间管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Apache Paimon 学习笔记

本博客对应于 B 站尚硅谷教学视频 尚硅谷大数据Apache Paimon教程&#xff08;流式数据湖平台&#xff09;&#xff0c;为视频对应笔记的相关整理。 1 概述 1.1 简介 Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合&#xff0c;推…

《深度探索c++对象模型》第七章笔记

非原创&#xff0c;在学习 7 站在对象模型的尖端 On the Cusp of the Object Model 这一章讨论三个著名的C语言扩充性质&#xff0c;它们都会影响CH对象。它们分别是 template、exception handling (EH&#xff09;和runtime type identification (RTTI) 模版、异常、通过运行…

vite项目中使用@代表根路径

1.配置vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import path from pathexport default defineConfig({plugins: [vue()],resolve: {alias:{: path.resolve(__dirname, src) }} })2.报错path和__dirname 找不到模块“path”或其相…

K8S系列文章 之 编写自动化部署K8S脚本

介绍 通过ansible脚本shell实现自动化部署k8s基础集群(v1.25.0) 部署结构 1. 通过二进制部署包镜像安装k8s集群、目录etcd节点只支持1-3个节点、最多三个etcd节点 2. 因k8s版本相对较新、需要升级内核来支持后台程序、当前版本只支持Cento7&#xff0c;内核版本(5.19.4-1.el7…