【JavaSE】数据类型和运算符

news2024/11/24 5:09:43

目录​​​​​​​

前言

数据类型

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终究是一条艰难险阻的路。

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

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

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

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

相关文章

针对某终端安全自检钓鱼工具的分析

前言 朋友微信找到我&#xff0c;说某微信群利用0day通告进行钓鱼&#xff0c;传播名为“终端安全自检工具”的恶意文件&#xff0c;然后还给了两个IP地址&#xff0c;如下&#xff1a; 咱们就来详细看看这个工具吧。 样本信息 拿到样本&#xff0c;样本的图标&#xff0c;如…

[嵌入式系统-16]:RT-Thread -2- 主要功能功能组件详解与API函数说明

目录 一、RT-Thread主要功能组件 二、内核组件 2.1 概述 2.2 API 三、设备驱动 3.1 概述 3.2 API 四、通信组件 4.1 概述 4.4 API 五、网络组件 5.1 概述 5.2 API 5.3 补充&#xff1a;MQTT协议 六、文件系统 6.1 概述 6.2 API 七、GUI 组件 7.1 概述 7.2 …

LabVIEW卫星电视接收仿真系统

LabVIEW卫星电视接收仿真系统 随着卫星电视数字化的加速&#xff0c;传统模拟信号接收系统已无法满足需求。设计一套船载数字卫星电视接收系统&#xff0c;通过LabVIEW环境进行仿真实验&#xff0c;验证系统设计的可行性与有效性&#xff0c;满足数字信号接收的高精度要求&…

【从Python基础到深度学习】2. Ubuntu及插件安装

本期所有软件安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1UVEYm-12FivAnrE5NUXevg?pwdum60 一、安装Ubuntu 1.1 软件安装包&#xff1a;下载 VMware Workstation Pro | CN 一直点下一步即可 1.2 双击运行软件&#xff1a; 输入密钥 1 、VMware 15密钥 …

【数据结构】16 二叉树的定义,性质,存储结构(以及先序、后序、中序遍历)

二叉树 一个二叉树是一个有穷的结点集合。 它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成的。 二叉树可具有以下5种形态。 性质 一个二叉树第i层的最大结点数为 2 i − 1 2^{i-1} 2i−1, i ≥ 1 i \geq 1 i≥1 每层最大结点可以对应完美二叉树&#xff08;…

[ai笔记9] openAI Sora技术文档引用文献汇总

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第9篇分享&#xff01; 这篇笔记承接上一篇技术文档的学习&#xff0c;主要是为了做一个记录&#xff0c;记录下openai sora技术介绍文档提到的一些论文&#xff0c;再此特地记录一下&#xff01; 1 原文…

机器学习 day38(有放回抽样、随机森林算法)

有放回抽样 有放回抽样和无放回抽样的区别&#xff1a;有放回可以确保每轮抽取的结果不一定相同&#xff0c;无放回则每轮抽取的结果都相同 在猫狗的例子中&#xff0c;我们使用”有放回抽样“来抽取10个样本&#xff0c;并组合为一个与原始数据集不同的新数据集&#xff0c;虽…

JavaSE-03笔记【继承~super】

文章目录 1. 继承1.1 继承概述&#xff08;理解&#xff09;1.2 如何继承&#xff08;掌握&#xff09;1.2.1 继承的语法格式1.2.2 具体举例 1.3 继承的相关特性&#xff08;掌握&#xff09;1.4 对继承自Object类的方法的测试&#xff08;理解&#xff09;1.5 难点解惑1.5.1 掌…

Leecode之合并两个有序链表

一.题目及剖析 https://leetcode.cn/problems/merge-two-sorted-lists/description/ 二.思路引入 用指针遍历两个链表并实时比较,较小的元素进行尾插,然后较小元素的指针接着向后遍历 三.代码引入 /*** Definition for singly-linked list.* struct ListNode {* int va…

云计算基础-快照与克隆

快照及克隆 什么是快照 快照是数据存储的某一时刻的状态记录&#xff0c;也就是把虚拟机当前的状态保存下来(快照不是备份&#xff0c;快照保存的是状态&#xff0c;备份保存的是副本) 快照优点 速度快&#xff0c;占用空间小 快照工作原理 在了解快照原理前&#xff0c;…

iTop-4412 裸机程序(二十二)- RTC时钟

目录 0.源码1. RTC2. iTop4412 中的 RTC使用的相关寄存器3. BCD编码4. 关键源码 0.源码 GitHub&#xff1a;https://github.com/Kilento/4412NoOS 1. RTC RTC是实时时钟&#xff08;Real Time Clock&#xff09;的缩写&#xff0c;是一种用于计算机系统的硬件设备&#xff0…

vscode写MATLAB配置

vscode写MATLAB python下载 官网说明Versions of Python Compatible with MATLAB Products by Release - MATLAB & Simulink 不确定这三列都表示什么意思&#xff0c;尽量安装这三列都有的python版本吧&#xff0c;我安装的 MATLAB R2023b,python选择的是3.11.5 …

2024 年 11 款最佳 iPhone 数据恢复软件和应用程序

数据丢失是任何人都无法承受的&#xff0c;因为它对每个人都至关重要。但导致数据丢失的原因有很多&#xff0c;一些常见的原因是意外删除数据、设备被盗、iOS 越狱、硬件损坏、病毒感染等。我们列出了 iOS 的顶级恢复工具&#xff0c;其中包括&#xff1a;将帮助您方便地恢复数…

LLM 参数,显存,Tflops? 训练篇(1)

如果你要训练一个模型大概会考虑哪些因素? 模型多大?参数 占用显存多少,能不能装的下 我需要多少算力来支撑 本文就针对一个标准的Transfomer模型的套路和大家简单说一下 为了后文大家看算式明白,我们先约定一下每个变量代表的意义 L: Trans…

网络安全最典型基础靶场-DVWA-本地搭建与初始化

写在前面&#xff1a; 之前也打过这个 DVWA 靶场&#xff0c;但是是在虚拟机环境下的一个小块分区靶场&#xff1b; 本篇博客主要介绍在本地搭建 DVWA 靶场以及靶场的初始化&#xff0c;后续会陆续更新通关教程。 由于我们是在本地搭建&#xff0c;则需要基于你已经装好 phpstu…

智能传感器阅读笔记-物联网用智能传感器技术的发展重点

物联网用智能传感器技术的发展重点包含边缘计算算法优化、身份认证算法优化和能量采集技术。 图1 物联网用智能传感器技术的发展重点 边缘计算算法优化 边缘计算是指在靠近物或数据源头的一侧&#xff08;传感器侧&#xff09;&#xff0c;采用集检测、计算、存储、通信功能…

用tensorflow模仿BP神经网络执行过程

文章目录 用矩阵运算仿真BP神经网络y relu ( (X․W ) b )y sigmoid ( (X․W ) b ) 以随机数产生Weight(W)与bais(b)placeholder 建立layer函数改进layer函数&#xff0c;使其能返回w和b github地址https://github.com/fz861062923/TensorFlow 用矩阵运算仿真BP神经网络 impo…

关于内存相关的梳理

1 关键字 总结 &#xff08;lowmemory&#xff0c;anr in&#xff09; 2 知识储备 虚拟机原理 垃圾回收算法 又包含标记 和清除两种算法 标记&#xff1a;程序计数器-已过时&#xff0c;可达性分析 具体可见 http://help.eclipse.org/luna/index.jsp?topic%2Forg.ec…

C#,二进制数的非0位数统计(Bits Count)的算法与源代码

计算一个十进制数的二进制表示有多少位1&#xff1f; 1 遍历法&#xff08;递归或非递归&#xff09; 使用循环按位统计1的个数。 2 哈希查表法 利用一个数组或哈希生成一张表&#xff0c;存储不同二进制编码对应的值为1的二进制位数&#xff0c;那么在使用时&#xff0c;只…

【Linux】进程的初步认识

进程的初步认识 基本概念描述进程task_struct-PCB的一种task_stuct内容分类 查看进程通过系统调用获取进程标识符 基本概念 要了解进程&#xff0c;首先我们要知道两点 我们可以同时启动多个程序&#xff0c;也就意味着我们可以将多个.exe文件加载到内存操作系统如何去管理这些…