【JavaSE】数据类型和运算符

目录​​​​​​​

前言

数据类型

1. 数据类型的分类

2. 基本数据类型

变量

1. 概叙

2. 整型变量

3. 字节型 & 短整型 & 长整型变量

4. 单 / 双精度浮点型变量

5. 字符型变量

6. 布尔型变量

类型转换

1. 自动类型转换(隐式)

2. 强制类型转换(显式) 

补充:类型提升

字符串类型

运算符

1. 算术运算符

2. 增量运算符

3. 自增/自减运算符

4. 关系运算符

5. 逻辑运算符

6. 位运算符

7. 移位操作符

8. 条件运算符

结语


前言

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,不仅如此,Java语言还具有简单性、面向对象、分布式、健壮性、安全性、跨平台性、可移植性、多线程与动态性等特点。总之,作为一门优秀的程序设计语言,Java是值得我们认真去深入学习的,从今天起,我们也将正式开启Java的学习之旅!

数据类型

1. 数据类型的分类

在Java中,数据类型主要分为两类:基本数据类型引用数据类型

2. 基本数据类型

数据类型关键字字节数数值范围
字节型byte1 个字节-128 ~ 127
短整型short2 个字节-32768 ~ 32767
整型int4 个字节-2^31 ~ 2^31 - 1
长整型long8 个字节-2^63 ~ 2^63 - 1
单精度浮点数float4 个字节一般不关注
双精度浮点数double8 个字节一般不关注
字节型char2 个字节0 ~ 65535
布尔型boolean无明确规定true 和 false
  • 没有long long这种类型
  • 整型和浮点型都默认带有符号的
  • 整型默认为int类型,浮点型默认为double类型
  • 字符串属于引用数据类型,后续我们会先详细介绍

变量

1. 概叙

在Java中,我们会将那些经常改变的内容称为变量,像人的身高,岁数的增长,成绩分数的多少等等。而数据类型就是用来定义不同种类的变量的。

2. 整型变量

// 在定义时就给初始值
public static void main(String[] args) {
    int a = 10;
    System.out.println(a);
}

// int型变量所能表示的范围
System.out.println(Integer.MAX_VALUE); //2147483647
System.out.println(Integer.MIN_VALUE); //-2147483648

注意事项:

  • int类型无论在哪种系统下都是4个字节
  • int的表示范围为:-2^31 ~ 2^31 - 1
  • 变量在使用前要记得赋值,否则编译会报错
  • int的包装类型是Integer(可以简单理解为plus版的int)

3. 字节型 & 短整型 & 长整型变量

public static void main(String[] args) {
    byte b = 10; // 字节型
    System.out.println(b);

    short s = 10; // 短整型
    System.out.println(s);

    long l = 10L; // 长整型
    System.out.println(l);
}

// byte、short、long型变量所能表示的范围
System.out.println(Byte.MAX_VALUE); //127
System.out.println(Byte.MIN_VALUE); //-128

System.out.println(Short.MAX_VALUE); //32767
System.out.println(Short.MIN_VALUE); //-32768

System.out.println(Long.MAX_VALUE); //9223372036854775807
System.out.println(Long.MIN_VALUE); //-9223372036854775808

注意事项:

  • byte类型在哪种系统下都是1个字节
  • byte的包装类型为Byte
  • short类型在哪种系统下都是2个字节
  • short的包装类型为Short
  • long在初始化时,在要后面加上L,以便区分
  • long类型在哪种系统下都是8个字节
  • long的包装类型为Long

4. 单 / 双精度浮点型变量

public static void main(String[] args) {
    float a = 1.0F; // 单精度浮点型
    System.out.println(a);
    
    double b = 2.0; // 双精度浮点型
    System.out.println(b);
}

注意事项: 

  • float类型在哪种系统下都是4个字节
  • float在初始化时,在要后面加上F,以便区分
  • float的包装类型为Float
  • double类型在哪种系统下都是8个字节
  • double的包装类型为Double

(浮点型和整型在内存中的存储方式不同,所以它不能单纯用 2^n 的形式来计算;任何一个浮点数都没有一个非常精确的值,但我们可以精确到具体小数点后第几位)

5. 字符型变量

public static void main(String[] args) {
    char c1 = 'A';  // 大写字符
    char c2 = '1';  // 数字
    char c3 = '呵'; // 中文字符 
    System.out.println(c1);
    System.out.println(c2);
    System.out.println(c3);
}

注意事项:

  • Java中使用 单引号+单个字母 的形式来表示字符变量
  • 在Java使用的是Unicode来表示字符,跟C语言的ASCII不一样
  • 一个字符占2个字节,因此可以表示的字符种类就更多,也包括中文字符
  • char的包装类型为Character

6. 布尔型变量

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

    boolean b = false;
    System.out.println(b);
}

注意事项: 

  • boolean类型的变量只有两种取值,true表示真,false表示假。在Java中,不存在 1 表示真,0 表示假
  • boolean类型没有明确规定占几个字节,且它不能和其他类型进行转换
  • boolean的包装类型为Boolean

类型转换

在Java中,当参与运算数据类型不一致时,就会进行类型转换,Java中类型转换主要分为两种:自动类型转换(隐式)和强制类型转换(显式)

1. 自动类型转换(隐式)

顾名思义,在代码编译时,编译器会自动进行类型转换,一般在数据类型小的转为数据类型大的时候会自动转换

2. 强制类型转换(显式) 

当进行操作时,代码需要我们自己强制类型转换才能完成,编译器无法自动完成,一般在数据类型大的转为数据类型小的时候会出现。我们通常采用 (目标类型) + 目标变量 的方式来强制类型转换

注意事项:

  • 在强制类型转换时,可能会使数据的精度丢失,要特别注意
  • 当我们将一个变量进行赋值时,Java会自动帮我们检查数字是否在该类型的表示范围之内
  • 强制类型转换不一定能成功,而且不相干的类型之间是无法相互转换的,比如boolean和其他类型

补充:类型提升

不同类型的数据进行运算时,数据类型小的会自动提升到数据类型大的一边,举个例子

  • 当 int 和 long 在一起运算时,int 会被提升为 long,所以就会出现下面的情况:c 因为是 int 类型,无法保存 a + b 得到的 long 类型,会出现丢失数据

  • byte 和 byte 的运算

为什么 byte 和 byte 相加后不能赋值给同为 byte 类型的 c 呢?原因在于:a 和 b 在相加前就已经被编译器自动提升为了 int 类型,再来相加,得到的结果当然也就为 int 类型啦,所以将结果直接赋值给 c 就会编译出错。

这种情况在 short 和 short 的运算也会出现,因为在计算机上,CPU通常是按照 4 个字节为单位从内存中读写数据,为了硬件上实现方便,所以低于 4 个字节的类型如 byte 和 short 类型就会先提升成 int,接着再参与计算

字符串类型

这个是最特殊的类型,不同于 C/C++ ,Java单独为字符串创建了一个专门的数据类型 —— String

在这里我们就简单介绍一下字符串类型,关于它的更多知识点我会在后面单独开一篇博客详细讲解的

运算符

1. 算术运算符

加法减法乘法除法取模
+-*/%

简单使用:

 注意事项: 

  • 以上运算符都是二元运算符,使用时需要有两个操作数
  • 在使用除法和取模时,右操作数不能为 0,否则会出现算术异常

  • 取模不仅可以对整数取模,也可以对 double 取模,不过没有实际意义,我们还是习惯对整数取模
  • 当两侧的操作数类型不一样时,数据类型小的会自动提升到数据类型大的一边

2. 增量运算符

加等

减等

乘等

除等

取模等

+=

-=

*=

/=

%=

该类运算符在完成操作后,会将结果直接赋值给左操作数

我们在上面讲类型提升的时候说道:“不同类型的数据进行运算时,数据类型小的会自动提升到数据类型大的一边”,但对于增量操作符来说,它会在计算的时候自动帮我们进行类型转换,如下:

3. 自增/自减运算符

4. 关系运算符

相等不相等小于大于小于等于大于等于
==!=<><=

>=

注意:关系运算符最后的计算结果只有两种情况:true 或者 false,是 boolean 类型

5. 逻辑运算符

逻辑与逻辑或逻辑非
&&||
一假全假一真全真真假互变

要注意的是:逻辑运算符的计算结果都是 boolean 类型,true 或者 false

短路求值:我们先来看一个例子

明明我们的除数为 0,应该会提示算术异常,那为什么这里没有提示呢?

这就是所谓的短路情况:

  • 对于 &&,如果左侧表达式值为 false,那么结果就一定是 false,不需要再计算右侧表达式
  • 对于 | |,如果左侧表达式值为 true,那么结果就一定是 true,不需要再计算右侧表达式
  • 但对于 & 和 | 来说,则不会发生短路

6. 位运算符

按位与按位或按位异或按位取反
&|^~
  • 按位与 &:如果两个二进制位都是1,则结果为1,否则结果为0
  • 按位或 | :如果两个二进制位都是0,则结果为0,否则结果为1
  • 按位取反~ :如果该位为0则转为1,是1则转为0(全部取反)
  • 按位异或 ^ :如果两个二进制位相同,则结果为0,相异则结果为1

7. 移位操作符

左移右移无符号右移
<<>>>>>

舍弃最左侧的数

最右侧补0

舍弃最右侧的数

最左侧补符号位

舍弃最右侧的数

最左侧补0

注意事项:

  • 移位操作符都是按照比特位来进行移位运算的
  • 左移时会丢弃掉符号位,因此正数左移可能会使结果变负
  • 左移一位相当于原数字 * 2^1,左移n位就相当于原数字 * 2^n
  • 右移一位相当于原数字 / 2^1,右移n位就相当于原数字 / 2^n

8. 条件运算符

表达式1(boolean类型)  ?表达式2 :表达式3
  • 表达式1 的值为 true 时,整个表示式的值就为 表达式2
  • 表达式1 的值为 false 时,整个表示式的值就为 表达式3

这是Java中唯一一个三目运算符,必须要注意,表达式1要为 boolean 类型

结语

这是我的第一篇Java博客,其实在学习Java的时候,感觉跟C语言有很多相似之处,数据类型啊、运算符啊都很类似,所以打好C语言的基础对学习其他语言真的很有帮助,但是学习Java终究是一条艰难险阻的路。

说实话,这篇博客我拖延了一个星期才终于把它写完,果然放假后我还是一如既往地摆烂,现在临近开学了,才会想着努力学习,忏悔自己摆烂的所作所为。唉~,终于写完了这篇博客,就以此为鉴吧,希望自己能够找回状态,规划好新学期,重点是多敲代码!!!

希望大家能过喜欢这篇文章,有总结不到位的地方还请多多谅解,若有出现纰漏,希望大佬们看到错误之后能够在私信或评论区指正,博主会及时改正,共同进步!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

身份治理存在权限问题

身份治理正迅速成为 CISO 的首要考虑因素。二十年前&#xff0c;当萨班斯-奥克斯利法案(SoX) 和其他监管指令在互联网泡沫破灭后诞生时&#xff0c;身份治理要求就出现了。合规性控制&#xff0c;例如用户访问审查和有效管理员工访问生命周期的需要&#xff0c;是当时身份治理的…

OpenCV中的边缘检测技术及实现

介绍: 边缘检测是计算机视觉中非常重要的技术之一。它用于有效地识别图像中的边缘和轮廓&#xff0c;对于图像分析和目标检测任务至关重要。OpenCV提供了多种边缘检测技术的实现&#xff0c;本博客将介绍其中的两种常用方法&#xff1a;Canny边缘检测和Sobel边缘检测。 理论介…

JavaSE-02笔记【封装~this和static】

文章目录 1.封装&#xff08;掌握&#xff09;1.1 封装的理解1.2 不封装存在的问题1.3 怎么封装1.4 难点解惑1.5 练习 2. this 和 static2.1 this&#xff08;掌握&#xff09;2.1.1 this是什么2.1.2 this 在实例方法中使用2.1.3 this访问实例变量2.1.4 this扩展①2.1.5 this扩…

林浩然与杨凌芸的Java时光魔法:格式化历险记

林浩然与杨凌芸的Java时光魔法&#xff1a;格式化历险记 The Java Time Odyssey of Lin Haoran and Yang Lingyun: A Formatting Adventure 在编程世界的一隅&#xff0c;有一个名叫林浩然的程序员。他是个Java大侠&#xff0c;对代码世界的法则了如指掌&#xff0c;尤其擅长驾…

Vue2学习第三天

Vue2 学习第三天 1. 计算属性 computed 计算属性实现 定义&#xff1a;要用的属性不存在&#xff0c;要通过已有属性计算得来。 原理&#xff1a;底层借助了Objcet.defineproperty方法提供的getter和setter。 get函数什么时候执行&#xff1f; 初次读取时会执行一次。当依赖…

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...

本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下&#xff1a; Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Ener…

人工智能学习与实训笔记(十四):Langchain Agent

0、概要 Agent是干什么的&#xff1f; Agent的核心思想是使用语言模型&#xff08;LLM&#xff09;作为推理的大脑&#xff0c;以制定解决问题的计划、借助工具实施动作。在agents中几个关键组件如下&#xff1a; Agent&#xff1a;制定计划和思考下一步需要采取的行动。Tools…

H12-821_44

44.如图所示的网络,R1设备配置路由渗透,那么R1设备把Level-2的LSP发送给R3,使R3可以获知全网路由。 A.正确 B.错误 答案&#xff1a;B 注释&#xff1a; 感觉题目描述有两个问题&#xff1a; 1. R3是Level-1-2路由器&#xff0c;本来就可以学习到Level-2的路由。题目中的R3应该…

会声会影支持哪些视频格式 会声会影2024软件下载 会声会影序列号在哪里购买

时常有朋友遇到这样的烦恼&#xff0c;就是从网络上下载下载来的视频&#xff0c;不能够导入到会声会影里面。这到底是怎么回事&#xff0c;到底支持哪些视频格式呢&#xff1f;下面小编将来给大家介绍一下。 还没有下载会声会影2024的朋友可以通过这个链接下载&#xff1a;ht…

mysql 执行update操作 记录未修改

问题 mysql 执行update操作 记录未修改 详细问题 笔者进行SpringBootMybatis项目开发&#xff0c;确认执行update操作 控制台内容如下 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession3cbe9459] was not registered for sync…

【c++】list详细讲解

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟悉list库 > 毒鸡汤&#xff1a;你的脸上云淡…

OpenAI Sora是世界模型?

初见Sora&#xff0c;我被OpenAI的野心震撼了。 他们不仅想教会AI理解视频&#xff0c;还要让它模拟整个物理世界&#xff01;这简直是通用人工智能的一大飞跃。 但当我深入了解后&#xff0c;我发现Sora比我想象的更复杂、更强大。 Sora不是简单的创意工具&#xff0c;而是…

【BBuf的CUDA笔记】十四,OpenAI Triton入门笔记二

0x0. 前言 接着【BBuf的CUDA笔记】十三&#xff0c;OpenAI Triton 入门笔记一 继续探索和学习OpenAI Triton。这篇文章来探索使用Triton写LayerNorm/RMSNorm kernel的细节。 之前在 【BBuf的CUDA笔记】十二&#xff0c;LayerNorm/RMSNorm的重计算实现 这篇文章我啃过Apex的La…

Caffeine本地缓存

Caffeine本地缓存 Caffine简介 简单说&#xff0c;Caffine 是一款高性能的本地缓存组件&#xff0c;由下面三幅图可见&#xff1a;不管在并发读、并发写还是并发读写的场景下&#xff0c;Caffeine的性能都大幅领先于其他本地开源缓存组件 常见的缓存淘汰算法 FIFO 它…

电源管理芯片是指在电子设备系统中,负责对电能的变换、分配、检测等进行管理的芯片

萨科微半导体宋仕强介绍说&#xff0c;电源管理芯片是指在电子设备系统中&#xff0c;负责对电能的变换、分配、检测等进行管理的芯片&#xff0c;其性能和可靠性直接影响电子设备的工作效率和使用寿命&#xff0c;是电子设备中的关键器件。萨科微slkor&#xff08;www.slkormi…

wps使用方法(包括:插入倒三角符号,字母上面加横线,将word中的所有英文设置为time new roman)

倒三角符号 字母上面加横线 将word中的所有英文设置为time new roman ctrla选中全文

人工智能学习与实训笔记(四):神经网络之自然语言处理

目录 六、自然语言处理 6.1 词向量 (Word Embedding) 6.1.1 词向量的生成过程 6.1.2 word2vec介绍 6.1.3 word2vec&#xff1a;skip-gram算法的实现 6.2 句向量 - 情感分析 6.2.1 LSTM (Long Short-Term Memory)介绍 6.2.2 基于飞桨实现的情感分析模型 6.3 BERT 六、自…

使用Taro开发鸿蒙原生应用——快速上手,鸿蒙应用开发指南

导读 本指南为开发者提供了使用 Taro 框架开发鸿蒙原生应用的快速入门方法。Taro&#xff0c;作为一个多端统一开发框架&#xff0c;让开发者能够使用一套代码同时适配多个平台&#xff0c;包括鸿蒙系统。文章将详细介绍如何配置开发环境&#xff0c;以及如何利用 Taro 的特性…

MATLAB知识点:datasample函数(★★☆☆☆)随机抽样的函数,能对矩阵数据进行随机抽样

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章&#xff1a;课后习题讲解中拓展的函数 在讲解第三…

.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2

前言 很多同学都不愿给电脑设动态壁纸&#xff0c;其中有个重要原因就是嫌它占资源过多。今天大姚分享一个.NET开源、免费&#xff08;MIT license&#xff09;的一个小而快并且功能强大的 Windows 动态桌面软件&#xff0c;支持视频和网页动画播放&#xff1a;DreamScene2。 …