图灵日记之java奇妙历险记--数据类型与变量运算符

news2025/2/3 20:48:43

目录

  • 数据类型与变量
    • 字面常量
    • 数据类型
    • 变量
      • 语法格式
      • 整型变量
      • 浮点型变量
      • 字符型变量
      • 希尔型变量
      • 类型转换
        • 自动类型转换(隐式)
        • 强制类型转换(显式)
      • 类型提升
        • 不同数据类型的运算
        • 小于4字节数据类型的运算
    • 字符串类型
  • 运算符
    • 算术运算符
    • 关系运算符
    • 逻辑运算符
      • 逻辑与&&
      • 逻辑或||
      • 逻辑非!
      • 短路求值
    • 位运算符
      • 按位与&
      • 按位或 |
      • 按位取反 ~
      • 按位异或^
    • 移位运算
    • 条件运算符

数据类型与变量

字面常量

看下面这个栗子,宝子们

System.out.println("cheer up!!!");

输出的"cheer up!!!"就是字面变量

字面常量的值在程序的整个生命周期中是不变的
字面常量的分类:
字符串常量
整形常量
浮点数常量
字符常量
布尔常量:只有两种true和false
空常量
注意:字符串,整形,浮点型,字符型以及布尔型,在java中都被叫作数据类型

数据类型

java中数据类型主要分为两类:基本数据类型和引用数据类型
基本数据类型有四类八种:

  1. 四类:整型、浮点型、字符型以及布尔型
  2. 八种:
    字节型 byte 1字节
    短整型 short 2字节
    整型 int 4字节
    长整型 long 8字节
    单精度浮点数 float 4字节
    双精度浮点数 double 8字节
    字符型 char 2字节
    布尔型 boolean
    整型和浮点数都是带符号的
    整型默认为int型,浮点型默认为double

变量

语法格式

数据类型 变量名 = 初始值

整型变量

分类:整型变量,长整型变量,短整型变量,字节型变量
注意:长整型初始值后面加L或者l,建议L,避免l长得太像1混淆

浮点型变量

包括单精度浮点型和双精度浮点型
和c语言一样,浮点数使用有限空间表示必然存在误差,浮点数是近似值不是精确值

字符型变量

宝子们目光向这里看

public class test
{
    public static void main(String[] args) {
        System.out.println("启动");
        System.out.println("시동");
        System.out.println("Ініціювати");
    }
}

计算机里的字符本质是一个整数,c语言使用的ASCII码表示字符,为了扩充更多的字符,采用unicode表示字符,一个字符占用2字节
有兴趣可以查询Java char 型了解一下

希尔型变量

布尔类型用来判断真假

public class test
{
    public static void main(String[] args)
    {
        boolean a = true;
        System.out.println(a);
    }
}

与c语言不一样,java的布尔类型就是true表示真,false表示假,而并非像c语言当中的非0表示真,0表示假,boolean与int类型不存在转换关系
在java虚拟机规范中并未明确规定boolean占几个字节

类型转换

public class test
{
    public static void main(String[] args)
    {
        int a = 10;
        long b = 2;
        b = a;
    }
}
自动类型转换(隐式)

如上图,数据范围小(int类型)的a赋值给b时,要转化为数据范围更大的long类型,这个过程会自动进行,比如int是个小盆子,long是个水缸(容量比小盆子大),int里的水倒入水缸里肯定不会溢出,但是倒过来就不行了,因为变量的值在编译过程是未知的,可能很大,你把水缸的水倒入盆子里就溢出,造成数据丢失了,但如果你非要把水缸里的水倒进盆子里,就要进行强制类型转换了

强制类型转换(显式)
public class test
{
    public static void main(String[] args)
    {
        int a = 10;
        long b = 2;
        b = a;
        a = (int)b;
    }
}

依旧是上图,非要把水缸里的水倒进盆子里的强硬做法,确实霸道(强制类型转换,可能会造成数据丢失)
注意:进行强制类型转换不一定会成功,毫不相干的类型是不能相互转换,比如Boolean与int类型转换

类型提升

不同数据类型的运算
    public static void main(String[] args) {
        long a = 10;
        int b = 10;
        int c = a+b;//报错
    }

如图,数据类型小的和数据类型大的运算时,a是long类型属于数据类型大的,b是int类型属于数据类型小的,两者在进行运算时,会把小类型(数据类型小的类型,往后不说了)提升为与大类型,也就是把b的int类型提升为long类型,然后与b进行运算,所以结果就是long类型,但是你用int类型来接收就达咩,所以要这样

    public static void main(String[] args) {
        long a = 10;
        int b = 10;
        long c = a+b;
    }

这样接收值就不会造成数据的丢失,但是你要是非常执着于int类型,对数据不管不顾,就是纯爱int,也可以,要这样

    public static void main(String[] args) {
        long a = 10;
        int b = 10;
        int c = (int)(a+b);
    }
    public static void main(String[] args) {
        long a = 10;
        int b = 10;
        int c = (int)a+b;
    }

玩的就是任性

小于4字节数据类型的运算
    public static void main(String[] args) {
        byte a = 1;
        byte b = 1;
        byte c = a+b;//报错
    }

有宝子就要说呀,为啥么相同类型直接的运算也会报错,这就要提到计算机的读取数据了,通常计算机CPU读取数据会按照4字节为单位来读取,也就是提升为int类型来参与计算
就图而言,a和b因为自己小于4个字节,非常卑微,经过思想教育提升到了4字节来计算,但是你还用个小盆子c来接收int(4字节)这个水缸就不道德了,就会直接报错,但是你非要用水盆子接收也可以,那就强转呗

    public static void main(String[] args) {
        byte a = 1;
        byte b = 1;
        byte c = (byte)(a+b);
    }

累了,写着一个强转吧
异或这样:

    public static void main(String[] args) {
        byte a = 1;
        byte b = 1;
        int c = a+b;
    }

小结:
1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

字符串类型

使用String类定义字符串类型

    public static void main(String[] args) {
        String a = "hello";
        String b = "java";
        System.out.println(a+b);
    }

有些情况需要字符串和整型数字直接进行转换,后续会补,这里不展开了捏

运算符

算术运算符

  1. 基本四则运算符:加减乘除模(+ - * / %)

%可以对整型取模.还可以对double类型取模,但是没有意义,一般是对整型取模

  1. 增量运算符 += -= *= %=
		int a = 4;
        double b = 5.0;
        a += b;
        System.out.println(a);

在这里,a和b的类型分别是int和double。在这个过程中,与a相加,得到的结果强转为int类型是9。由于a的类型是int,所以结果也是int类型。如果你想要得到9.0,你需要将a的类型改为double

  1. 自增/自减运算符 ++ –
    public static void main(String[] args) {
        int a = 10;
        a = a++;
        System.out.println(a);
    }

与c语言不同,此处java的结果是10,而非11,因为c语言中,a=a++的步骤可以分成a = a;a++;
两步,这样a的值应该是11,但是java结果是10,此处涉及操作表和局部变量表,但是宝子们可以大致这样理解,int temp = a;(保存原始值)
a = a + 1;(执行递增)然后temp的值再赋值给a,所以还是10,

关系运算符

在C语言中,表达式 5 < a < 10 ,C语言中的比较操作符是左关联的,所以这个表达式实际上会被解释为 (5 < a) < 10。由于 (5 < a) 的结果是1(真),因此整个表达式将变成 1 < 10,最终结果是真(1)。
在C语言中,关系运算符的结果是一个整数,要么是1(真),要么是0(假)
然而,在Java中,情况是不同的。Java中的比较运算符是不能被链式使用的,因此 5 < a < 10 这样的表达式在Java中是非法的。

注意:想表达数学表达式5 < a < 10要用(5<a&&a<10)来判断

逻辑运算符

逻辑与&&

语法规则:表达式1 && 表达式2,左右表达式必须是boolean类型的结果。
在这里插入图片描述

逻辑或||

语法规则:表达式1 || 表达式2,左右表达式必须是boolean类型的结果。
注意:左右表达式至少有一个为真,则结果为真

逻辑非!

语法规则: !表达式
真变假,假变真

短路求值

    public static void main(String[] args) {
        System.out.println(2<1&&1/0==0);
        System.out.println(2>1||1/0==0);
    }

&&运算在第一个错误时,将直接判断错误,不会判断第二个条件,因为不会报错,||则是第一个条件正确后,就直接跳出,不判断第二个条件

    public static void main(String[] args) {
        System.out.println(2<1&1/0==0);
        System.out.println(2>1|1/0==0);
    }

如果是&和|就不一样了,他们都会对两个条件进行判断,所以此处会报错

位运算符

按位与&

如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.

按位或 |

如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

按位取反 ~

如果该位为 0 则转为 1, 如果该位为 1 则转为 0

按位异或^

如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

移位运算

  1. 左移 <<: 最左侧位不要了, 最右侧补 0.
  2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
  3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0.

条件运算符

条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法

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

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

相关文章

案例125:基于微信小程序的个人健康数据管理系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【论文阅读】FreeU: Free Lunch in Diffusion U-Net

FreeU: 无需训练直接提升扩散模型生成效果。 paper&#xff1a;https://arxiv.org/abs/2309.11497 code&#xff1a;GitHub - ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net 1. 介绍 贡献&#xff1a; •研究并揭示了U-Net架构在扩散模型中去噪的潜力&#xff0…

目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估

Hi, I’m Shendi 1、目标检测入门体验&#xff0c;技术选型&#xff0c;加载数据集、构建机器学习模型、训练并评估 在最近有了个物体识别的需求&#xff0c;于是开始学习 在一番比较与询问后&#xff0c;最终选择 TensorFlow。 对于编程语言&#xff0c;我比较偏向Java或nod…

vue关闭当前路由页面并跳转到其父页面

1.dom中添加关闭或取消按钮 <el-button type"primary" class"blueLinearbg cancelBtn" click"cancel" >取 消</el-button>2.cancel方法中 /*取消或关闭*/cancel(){this.$store.dispatch("tagsView/delView", this.$route)…

state的保留与重置

让组件状态保留的情况&#xff1a; 让组件状态重置的3种情况&#xff1a;

[NISACTF 2022]easyssrf

[NISACTF 2022]easyssrf wp ssrf 的题目&#xff0c;提示了会使用 curl 连接输入的网站并返回响应包。 测试连接百度 直接在输入框中写 www.baidu.com 是无法连接的&#xff0c;需要在前面加入 http 或者 https &#xff0c;因为 curl 的使用方式就是&#xff1a; curl htt…

从0到1部署gitlab自动打包部署项目

本文重点在于配置ci/cd打包 使用的是docker desktop 第一步安装docker desktop Docker简介 Docker 就像一个盒子&#xff0c;里面可以装很多物件&#xff0c;如果需要某些物件&#xff0c;可以直接将该盒子拿走&#xff0c;而不需要从该盒子中一件一件的取。Docker中文社区、…

Ubuntu 常用命令之 man 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 man命令在Ubuntu系统中是一个非常重要的命令&#xff0c;它用于查看系统的手册页。手册页是Linux和Unix系统中的一种在线文档&#xff0c;用于描述系统中的命令、函数、配置文件等的详细信息。 man命令的基本格式是 man [选项] …

光伏企业如何能够提高光伏电站的建设效率?

随着全球对可再生能源需求的日益增长&#xff0c;光伏行业的发展势头强劲。然而&#xff0c;光伏电站建设过程中往往存在效率低下的问题&#xff0c;这不仅影响了电站的运营成本&#xff0c;也制约了整个行业的发展速度。因此&#xff0c;如何提高光伏电站的建设效率&#xff0…

DshanMCU-R128s2 Hello World!

本文将介绍使用 R128 开发板从串口输出 Hello World 的方式介绍 SDK 软件开发流程。 载入方案 我们使用的开发板是 R128-Devkit&#xff0c;需要开发 C906 核心的应用程序&#xff0c;所以载入方案选择r128s2_module_c906 $ source envsetup.sh $ lunch_rtos 1编辑程序 打…

Windows 系统下本地单机搭建 Redis(一主二从三哨兵)

目录 一、Redis环境准备&#xff1a; 1、下载redis 2、Windows下的.msi安装和.zip格式区别&#xff1a; 二、哨兵介绍&#xff1a; 1、一主二从三哨兵理论图&#xff1a; 2.哨兵的主要功能&#xff1a; 3.哨兵用于实现 redis 集群的高可用&#xff0c;本身也是分布式的&…

锐捷配置PVLAN

一、实验拓扑 二、实验目的 PVLAN可以通过主VLAN和辅助VLAN的概念&#xff0c;部署隔离技术&#xff0c;实现用户间的互访控制。 三、实验配置 SW2 Ruijie >enable Ruijie #configure terminal Ruijie (config)#vlan 20 Ruijie (config-vlan)#private-vlan community …

喜报|迪捷软件“ModelCoder 建模及形式化验证代码生成软件”荣登浙江省首版次产品目录

近日&#xff0c;浙江省经济和信息化厅公布《2023年浙江省首版次软件产品应用推广指导目录》&#xff0c;浙江迪捷软件科技有限公司的“ModelCoder 建模及形式化验证代码生成软件”经过多轮审核及专家评定被纳入目录&#xff0c;这是迪捷软件自主研发的产品继“天目全数字实时仿…

嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑

一、目的/概述 二、资料来源 三、逻辑和包含关系 四、Arm GNU Toolchain最常用的命令 嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑 一、目的/概述 对比高集成度的IDE(MDK、IAR等)&#xff0c;Linux开发需要自己写Makefile等多种脚本。eclipse、Visual Studio等需要了解预处…

冬天天冷早安问候语关心话,愿我的每句话都能带给你温馨

1、送你一声问候&#xff0c;为你驱走冬日严寒&#xff0c;送你一份关怀&#xff0c;为你增添丝丝温暖&#xff0c;送你一句祝福&#xff0c;为你驱走所有不快&#xff0c;送你一份关爱&#xff0c;为你增添幸福无限&#xff0c;天虽寒了&#xff0c;我的关心犹在&#xff0c;愿…

一分钟学会“沉浸式翻译”插件的安装与使用

一、安装 安装地址&#xff1a;https://immersivetranslate.com/ 选择对应的浏览器进入安装即可 二、简单的翻译使用方法 第一次安装需要先刷新界面才可以达到翻译效果 核心需要修改的地方在以下三个&#xff1a; 第一处&#xff1a;设置翻译服务&#xff0c;免费版的可以直接…

uniapp中如何使用百度tts生成文字语音并播放

第一步先在百度云里面申请一个tts应用&#xff0c;这里默认你们都会了哈&#xff0c;申请完是这样的 第二步在manifest.json注册一下 第三步进项目,先获取token handleGetToken() {// client_id和client_secret就是百度API Key和Secret Keyuni.request({url: https://aip.ba…

【PHP手麻系统源码】基于mysql+laravel+vue开发的医院手术麻醉系统源码,实现围术期患者数据的自动采集与共享

手麻系统作为医院信息化系统的一环&#xff0c;由监护设备数据采集系统和麻醉信息管理系统两个子部分组成。手麻信息系统覆盖了患者术前、术中、术后的手术过程&#xff0c;可以实现麻醉信息的电子化和手术麻醉全过程动态跟踪。 以服务围术期临床业务工作的开展为核心&#xf…

人工智能_机器学习070_SVM支持向量机_软间隔及优化_硬间隔_衡量间隔软度_引入松弛变量_理解隔离参数---人工智能工作笔记0110

我们继续说,之前说的C是什么意思? 我们在这个软间隔优化中就可以引出C 可以看到之前我们讨论的问题,都是基于样本点的,完全的线性可分的问题,我们称为硬间隔 可以看到这种,一分就可以,分开,简单分割就可以分开的数据,我们称之为硬间隔 但是可以看到上面这种情况,无论怎么分,都…

Unresolved plugin: ‘org.apache.maven.plugins‘解决报错

新建springboot项目报Unresolved plugin: ‘org.apache.maven.plugins:maven-surefire-plugin:3.1.2’ 缺什么插件 引入什么插件的依赖就行 <dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifact…