变量数据类型 Day3
1. 变量
1.1 变量的概念
- 变量是计算机内存中的一块存储单元,是存储数据的基本单元
- 变量的组成包括:数据类型、变量名、值,后文会具体描述
- 变量的本质作用就是去记录数据的,比如说记录一个人的身高、体重、年龄,就需要去程序中记录数据,而不同的数据使用不同的数据类型去存储,后文会具体描述
1.2 变量的定义
变量的定义有三种方法
- 直接声明
- 先声明后赋值
- 多个同类型变量声明与赋值
代码举例:
public class VariableDefine {public static void main(String[] args) {int age; //第一种方法:变量的声明age = 21;int number = 12345; //第二种方法:先声明后赋值int a,b,c = 100,d=123; //第三种方法:多个同类型变量声明与赋值System.out.println("age = " + age);System.out.println("number = " + number);System.out.println("c = " + c);System.out.println("d = " + d);}
}
-
以上代码可以清晰看到三种变量的定义方法
-
输出结果:
-
要实现 age = 21这种效果,只需要在输出时,用
字符串 + 变量
就可以了,如上输出,其中,+
只做文字拼接,不做加法计算 -
注意如果只是单纯输出变量的值,不需要双引号,如
System.out.println(age); //输出变量的值,不需要加双引号 System.out.println("age"); //如果加了双引号,那么输出的是字符age,既不是变量age也不是变量的值。
输出结果
-
注意事项:
-
未赋值的变量是不能使用的,当我们注释掉了age,此时age就没有赋值,可以看到没有赋值是直接报错了
-
第三种定义变量的方法,不推荐使用,因为代码可读性不高,不便于阅读
1.3 变量概念解析
有了变量的定义,用以上代码解析一下变量的概念
- 变量是计算机内存中的一块存储单元,是存储数据的基本单元
- 当我们声明一个变量age,
int age;
那么在内存当中就会开辟一个int字节的空间,这块空间的名称叫做age,我们可以通过age来访问到这一块空间
- 当我们声明一个变量age,
此时里面还没有数据,我们只需要赋值age = 21;
就把数据存到内存当中
- 变量的组成包括:数据类型、变量名、值
- 比如说:
int number = 12345;
,其中int是整数类型,变量名为number,值为12345,这三个部分组成了一个number变量
- 比如说:
2.数据类型
Java是一个强类型的语言,它的变量具有严格的数据类型区分
在Java中,任何一个值都有他对应的数据类型
我们可以大概的把数据类型分为两类
- 基本数据类型
- 整数
- 浮点数
- 字符类型
- 布尔类型
- 引用数据类型(可以理解为,除了基本数据类型其他基本上都是引用数据类型)
- 字符串
- 数组
- 对象
下面将会具体介绍数据类型
2.1 整数类型
整数类型里面有四种类型
类型 | 字节 | 取值范围(二进制) | 取值范围(十进制) |
---|---|---|---|
byte | 1字节 | -2^7 ~2^15-1 | -128~127 |
short | 2字节 | -2^15 ~ 2^15-1 | -32768~32767 |
int | 4字节 | -2^31 ~ 2^31-1 | -2147483648~2147483647 |
long | 8字节 | -2^63 ~ 2^63-1 | -9223372036854775808~9223372036854775807 |
- 其中,int是整数的默认类型
代码举例:
public class DateType {public static void main(String[] args) {byte a = 127;short b = 32767;int c = 2147483647;long d = 9223372036854775807;}
}
可以看到,实际上在编译器上, 当我们定义一个long类型,为什么输入了数字之后,明明是long的合法范围,却显示最大呢?
_id=img-Os2Lh8gN-1725799836837)
-
那是因为整数的默认类型是int类型,所以当你输入这么大个数字的时候,其实默认的是把这个数字存放到int类型的空间中,但是很显而易见,四个字节的空间无法存放这么大的数字。
-
解决方法:在后面加个L,表示是long类型,即
long d = 9223372036854775807L;
-
-
那么我们什么时候会加L呢?
- 当数值超过了int类型的范围,则需要在数值后面加上
L
- 当数值并未超过int类型的范围,则可加可不加
- 一般如果不加的话,且没超过int类型的范围,那么就是默认int类型,即使你变量的数据类型是long,但值如果没超过int类型的话,实际上还是以int类型存放,因为假如定义了
long d = 100;
,那么就会开辟8个字节空间来存放100,造成了很大的空间浪费
- 一般如果不加的话,且没超过int类型的范围,那么就是默认int类型,即使你变量的数据类型是long,但值如果没超过int类型的话,实际上还是以int类型存放,因为假如定义了
- 当数值超过了int类型的范围,则需要在数值后面加上
2.2 浮点类型
浮点类型主要是单精度浮点数(float)和双精度浮点数(double),两者都是近似值而不是精确值
类型 | 字节 | 负数取值范围 | 正数取值范围 |
---|---|---|---|
float | 4字节 | -3.4E+38 ~ -1.4E-45 | 1.4E-45 ~ 3.4E+38 |
double | 8字节 | -1.7E+308 ~ -4.9E-324 | 4.9E-324 ~ 1.7E+308 |
其中,double为浮点数的默认类型,若要为float赋值,需要在值的后面加F
代码举例:
public class DateType {public static void main(String[] args) {float a = 3.4E+38F;double b = 1.7E+308;System.out.println("a = " + a);System.out.println("b = " + b);}
}
2.3 字符类型
类型 | 字节 | 取值范围(无符号数) | 字符编码 |
---|---|---|---|
char | 2字节 | 0 ~ 65535 | Unicode字符集(万国码) |
- Unicode字符集支持ASCII码
2.3.1 字符类型的赋值方式
-
字符赋值
public class DateType {public static void main(String[] args) {char ch1 = 'a';char ch2 = '1';char ch3 = '耶';char ch4 = '!';System.out.println("ch1 = " + ch1);System.out.println("ch2 = " + ch2);System.out.println("ch3 = " + ch3);System.out.println("ch4 = " + ch4);} }
-
整数赋值
-
用ASCII码的值进行直接赋值 0~127
public class DateType {public static void main(String[] args) {char ch1 = 33;char ch2 = 65;char ch3 = 98;char ch4 = 100;System.out.println("ch1 = " + ch1);System.out.println("ch2 = " + ch2);System.out.println("ch3 = " + ch3);System.out.println("ch4 = " + ch4);} }
运行结果
-
用Unicode(万国码)的值进行直接赋值 0~65535
-
中文的取值范围是:\u4e00(19968) ~ \u9af5(40969) 十六进制(十进制)
public class DateType {public static void main(String[] args) {char ch1 = 19968;char ch2 = 20249;char ch3 = 20255;char ch4 = 40869;System.out.println("ch1 = " + ch1);System.out.println("ch2 = " + ch2);System.out.println("ch3 = " + ch3);System.out.println("ch4 = " + ch4);} }
运行结果
-
-
-
进制赋值
-
用单引号包括十六进制的Unicode字符值,要以\u开头
package com.csdn.code.day3;public class DateType {public static void main(String[] args) {char ch1 = '\u4e00';char ch2 = '\u4fa2';char ch3 = '\u5af3';char ch4 = '\u9af5';System.out.println("ch1 = " + ch1);System.out.println("ch2 = " + ch2);System.out.println("ch3 = " + ch3);System.out.println("ch4 = " + ch4);} }
-
中文的取值范围是:\u4e00 ~ \u9af5 十六进制
运行结果
-
-
2.3.2 转义字符
我们刚刚看到的’\u’就是一个转义字符,表示一个十六进制数对应的的字符
下面我们来具体了解一下什么是转义字符
转义字符概念:用于保存一些特殊符号或者是一些特殊的效果
以下是常用的转义字符
转义字符 | 描述 |
---|---|
\n | 换行符 |
\t | 缩进(制表位) |
\ \ | 反斜线 |
\‘ | 单引号 |
‘’ | 双引号 |
代码举例:
public class DateType {public static void main(String[] args) {System.out.println("i\nlove\nyou\n");System.out.println("i\tlove\tyou\t");System.out.println("\\i love you\\");System.out.println("\'i love you\'");System.out.println("\"i love you\"");}
}
运行结果
2.4 布尔类型
类型 | 字节 | 取值范围 | 描述 |
---|---|---|---|
boolean | 1字节 | true/false | 仅可描述”真“或者”假“ |
- 布尔类型不能参加算术运算
- true表示真
- false表示假
代码举例:
package com.csdn.code.day3;public class DateType {public static void main(String[] args) {boolean a = true; //直接对布尔类型的变量赋值boolean b = false; //直接赋true or falseint c = 20;int d = 40;boolean result1 = c > d; //赋值 最终结果为true or false的表达式boolean result2 = c < d;System.out.println("a = " + a);System.out.println("b = " + b);System.out.println("result1 = " + result1);System.out.println("result2 = " + result2);}
}
运行结果如下:
2.5 String类型
类型 | 取值范围 | 字符编码 |
---|---|---|
String | 任何""之间的值 | Unicode字符编码 |
String类型是JDK提供的一个类,属于引用数据类型,任何""包括的内容都是字符串
代码举例
package com.csdn.code.day3;public class DateType {public static void main(String[] args) {String str1 = "I am ?0 o O";String str2 = "I am 21 years old\n";System.out.println(str1);System.out.print(str2); // \n和println()方法都有换行的效果,选其一即可}
}
运行结果
相关文章:

变量数据类型 Day3
1. 变量 1.1 变量的概念 变量是计算机内存中的一块存储单元,是存储数据的基本单元变量的组成包括:数据类型、变量名、值,后文会具体描述变量的本质作用就是去记录数据的,比如说记录一个人的身高、体重、年龄,就需要去…...

SpringBoot2:请求处理原理分析-RESTFUL风格接口
一、RESTFUL简介 Rest风格支持(使用HTTP请求方式,动词来表示对资源的操作) 以前:/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改…...
[Linux][配置]Linux修改history存储的最大记录数
Linux修改History最大记录为20000行 sed -i s/^HISTSIZE1000/HISTSIZE20000/ /etc/profile source /etc/profile 在 Linux 系统中,HISTSIZE 环境变量用于定义历史记录的大小,即在终端中可以回溯的命令数量。默认情况下,这个值通常是 1000&…...

代码随想录 刷题记录-28 图论 (5)最短路径
一、dijkstra(朴素版)精讲 47. 参加科学大会 思路 本题就是求最短路,最短路是图论中的经典问题即:给出一个有向图,一个起点,一个终点,问起点到终点的最短路径。 接下来讲解最短路算法中的 d…...

大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
C++复习day04
一、函数重载 1.什么是函数重载? 自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重 载了。 比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用…...

[苍穹外卖]-04菜品管理接口开发
效果预览 新增菜品 需求分析 查看产品原型分析需求, 包括用到哪些接口, 业务的限制规则 业务规则 菜品名称必须是唯一的菜品必须属于某个分类下, 不能单独存在新增菜品时可以根据情况选择菜品的口味每个菜品必须对应一张图片 接口设计 根据类型查询分类接口 文件上传接口 …...
gitlab 启动/关闭/启用开机启动/禁用开机启动
文章目录 启动 gitlab关闭 gitlab查看 gitlab 运行状态启用 gitlab 开机启动禁用 gitlab 开机启动GitlabGit启动 gitlab hxstrive@localhost:~$ sudo gitlab-ctl start ok: run: alertmanager: (pid 65953) 0s ok: run: gitaly: (pid 65965) 0s ok: run: gitlab-exporter: (pi…...

中间件解析漏洞(附环境搭建教程)
⼀:IIS解析漏洞 环境资源: https://download.csdn.net/download/Nai_zui_jiang/89717504 环境安装 windows2003iis6 1.创建新的虚拟机 2.在下⼀步中选择我们的iso⽂件镜像 vm已主动识别到windows2003 3.产品密钥⽹上搜⼀个 密码自己设置一个简单的&…...

matlab实现kaiser窗+时域采样序列(不管原信号拉伸成什么样子)是一样的,变到频谱后再采样就是一样的频域序列。
下图窗2的频谱在周期化的时候应该是2(w-k*pi/T)我直接对2w减得写错了 可见这两个kaiser窗频谱不一样,采样间隔为2T的窗,频谱压缩2倍,且以原采样频率的一半周期化。 但是这两个不同的kaiser窗在频域采样点的值使完全一…...

git为不同的项目设置不同的提交作者
方法1:找到项目的.git文件夹打开 打开config在下面添加自己作者信息 [user]name 作者名email 邮箱方法2:直接在.git文件夹设置作者名(不使用–global参数) git config user.name "xxxxx"如果想要修改之前提交的…...
防爆定位信标与防爆定位基站有什么区别?
新锐科技 https://baijiahao.baidu.com/s?id1804974957959442238&wfrspider&forpc http://www.xinruikc.cn/biaoqian/52.html http://www.xinruikc.cn/xinbiao/...

QT 编译报错:C3861: ‘tr‘ identifier not found
问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )...

谈谈ES搜索引擎
一 ES的定义 ES 它的全称是 Elasticsearch,是一个建立在全文搜索引擎库Lucene基础上的一个开源搜索和分析引擎。ES 它本身具备分布式存储,检索速度快的特性,所以我们经常用它来实现全文检索功能。目前在 Elastic 官网对 ES 的定义,…...

【MySQL】MySQL基础
目录 什么是数据库主流数据库基本使用MySQL的安装连接服务器服务器、数据库、表关系使用案例数据逻辑存储 MySQL的架构SQL分类什么是存储引擎 什么是数据库 mysql它是数据库服务的客户端mysqld它是数据库服务的服务器端mysql本质:基于C(mysql)…...
Spring中Bean的相关注解
目录 1.Spring IoC&DI 2.关于Bean存储的相关注解(类注解与方法注解) Bean的获取方式 类注解和方法注解的重命名 2.1 类注解 2.1.1 Controller 2.1.2 Service 2.1.3 Repository 2.1.4 Component 2.1.5 Configuration 2.2 方法注解-Bean 2.2.1 定义多个对象 2.2…...

Golang | Leetcode Golang题解之第385题迷你语法分析器
题目: 题解: func deserialize(s string) *NestedInteger {if s[0] ! [ {num, _ : strconv.Atoi(s)ni : &NestedInteger{}ni.SetInteger(num)return ni}stack, num, negative : []*NestedInteger{}, 0, falsefor i, ch : range s {if ch - {negati…...

【Java 优选算法】双指针(上)
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 移动零 分析 代码 复写零 分析 代码 快乐数 分析 代码 盛最多水的容器 分析 代码 移动零 题目链接 分析 双指针算法,利用两个指针cur和dest将数组划分为三个区间…...

【自动驾驶】控制算法(八)横向控制Ⅰ | 算法与流程
写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…...
Android SSE 单向接收数据
Server-Sent Events(SSE)是一种在客户端和服务器之间实现单向实时通信的技术。它允许服务器向客户端推送数据,但客户端无法使用 SSE 向服务器发送数据。这使得其适用于需要持续接收服务器数据的应用场景(如实时通知、股票行情、社…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...