【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); //-128System.out.println(Short.MAX_VALUE); //32767
System.out.println(Short.MIN_VALUE); //-32768System.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终究是一条艰难险阻的路。

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

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

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

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

相关文章

WIN11 WSL2 Ubuntu系统删除Docker镜像后磁盘空间未减少问题解决办法

因为 windows 中的 docker 使用虚拟磁盘&#xff08;VHDX&#xff09;来存储文件系统。 windows中&#xff0c;docker需在WSL2配置下才可使用。 &#xff08;WSL是windows推出的可让开发人员不需要安装虚拟机(vmware,virtbox)或者设置双系统启动就可以原生支持运行GNU/Linux的…

【数据结构之排序算法】

数据结构学习笔记---010 数据结构之排序算法1、排序的基本概念及其运用1.1、常见排序算法的实现2、插入排序的实现2.1、直接插入排序2.1.1、直接插入排序的实现2.1.1.1、直接插入排序InsertSort.h2.1.1.2、直接插入排序InsertSort.c2.1.1.3、直接插入排序main.c2.1.2、直接插入…

【MySQL】多表关系的基本学习

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-3oES1ZdkKIklfKzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【双指针】:Leetcode611.有效三角形的个数

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本专栏是关于各种算法的解析&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构专栏&…

Linux操作系统基础(十二):yum软件包管理器

文章目录 yum软件包管理器 一、yum常用命令 二、yum在线安装软件案例 三、yum在线删除软件案例 yum软件包管理器 yum&#xff08; Yellow dog Updater, Modified&#xff09;是一个在 Fedora 和 RedHat中的 Shell 前端软件包管理器。基于RPM包管理&#xff0c;能够从指定的…

Java基于微信小程序的畅阅读微信小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

CS50x 2024 - Lecture 6 - Python

00:00:00 - Introduction 00:01:01 - Python print("hello world")与c的显著差异 1.不必显式包含标准库 2.不再需要定义main函数 00:07:24 - Speller 00:13:41 - Filter from PIL import Image, ImageFilterbefore Image.open("bridge.jpg") after…

h5和微信小程序实现拍照功能(其中h5暂时无法调用闪光灯)

代码如下 <template><view class"camera"><!-- #ifdef MP --><camera ref"myCamera" id"myCamera" device-position"back" :flash"flash" error"error" style"display: block;"&…

《中国教育报》2024投稿攻略

《中国教育报》2024投稿攻略 《中国教育报》普通版&#xff0c;1800字符1/4版&#xff0c;2300字符1/3版&#xff1b;周期1-2个月 《中国教育报》理论版 收中小学&#xff0c;全包1800字符&#xff1b;2500字符。收高校 2000-2300字符&#xff0c;六个月周期。 《中国教育…

人工智能学习与实训笔记(一):零基础理解神经网络

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、什么是神经网络模型 二、机器学习的类型 2.1 监督学习 2.2 无监督学习 2.3 半监督学习 2.4 强化学习 三、网络模型结构基础 3.1 单层网络 ​编辑 3.2 多层网络 3.3 非线性多层网络…

C++11---(1)

目录 一、C11简介 二、列表初始化 2.1、{ } 初始化 三、变量类型推导 3.1、auto 3.2、decltype 为什么需要decltype 四、final和override 4.1、final 4.2、override 五、默认成员函数控制 5.1、default修饰函数 5.2、delete修饰函数 六、nullptr 一、C11简介 C11是…

【STM32 CubeMX】STM32中断体系结构

文章目录 前言一、中断体系的比喻二、中断的内部结构2.1 EXTI触发方式 2.2 NVIC2.3 cpu与中断2.4 外部中断控制器框图上升沿触发选择寄存器屏蔽/使能寄存器等待处理寄存器 2.5 中断优先级 总结 前言 一、中断体系的比喻 STM32中断体系如下图所示&#xff1a; 一座大型建筑物…

STM32F1 - 系统时钟SysTick

SysTick 1> SysTick硬件框图2> SysTick的时钟源3> 1ms定时_中断方式4> 思考&#xff1a;无符号数 0 - 255 ?相关资料 1> SysTick硬件框图 SysTick属于Cotex-M3&#xff0c;是CPU外设&#xff1b; SysTick: 位宽24bit&#xff0c; 递减计数&#xff0c;自动重装…

让你的资金运动起来,金钱的聪明处理方式

一、教程描述 本套教程主要讲解了金融思维和财务思维&#xff0c;常见投资工具的实操技巧&#xff0c;资产配置方案的制定方法&#xff0c;等等&#xff0c;将会重构你现有的投资观念&#xff0c;提升你认知的宽度和深度&#xff0c;可以轻松读懂财经新闻&#xff0c;不仅学会…

spring boot3登录开发-2(1图形验证码接口实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 内容简介 图形验证码接口实现 导入糊涂工具依赖 接口分析 编写验证码接口 测试验证码接口 前置条件 …

2024年通信安全员ABC证证模拟考试题库及通信安全员ABC证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年通信安全员ABC证证模拟考试题库及通信安全员ABC证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;通信安全员ABC证证模拟考试题库是根据通信安全员ABC证最新版教材&#xff0c;通信安全员ABC证大纲整理…

【Linux 04】编辑器 vim 详细介绍

文章目录 &#x1f308; Ⅰ 基本概念&#x1f308; Ⅱ 基本操作1. 进入 / 退出 vim2. vim 模式切换 &#x1f308; Ⅲ 命令模式1. 光标的移动2. 复制与粘贴3. 剪切与删除4. 撤销与恢复 &#x1f308; Ⅳ 底行模式1. 保存文件2. 查找字符3. 退出文件4. 替换内容5. 显示行号6. 外…

ElementUI Form:Cascader 级联选择器

ElementUI安装与使用指南 Cascader 级联选择器 点击下载learnelementuispringboot项目源码 效果图 el-cascader.vue&#xff08;Select选择器&#xff09;页面效果图 项目里el-cascader.vue代码 <script> let id 0; export default {name: el_cascader,data() {re…

线性代数的本质 2 线性组合、张成的空间、基

基于3Blue1Brown视频的笔记 一种新的看待方式 对于一个向量&#xff0c;比如说&#xff0c;如何看待其中的3和-2&#xff1f; 一开始&#xff0c;我们往往将其看作长度&#xff08;从向量的首走到尾部&#xff0c;分别在x和y上走的长度&#xff09;。 在有了数乘后&#xff0…

Netty中的适配器、Handler共享和资源管理

ChannelHandler的适配器 有一些适配器类可以将编写自定义的ChannelHandler所需要的工作降到最低限度&#xff0c; 因为它们提供了定义在对应接口中的所有方法的默认实现。因为有时会忽略那些不感兴趣的 事件&#xff0c;所以Netty提供了抽象积累ChannelInboundHandlerAdapter(…