JAVA的数据类型与变量

news/2024/5/20 17:31:30/文章来源:https://blog.csdn.net/WHabc2002/article/details/131912422

目录

1. 字面常量

2. 数据类型

3. 变量 

 3.2 长整型变量

3.3 短整型变量 

3.4 字节型变量

3.5双精度浮点型

3.6 单精度浮点型  

3.7字符型变量

 3.8布尔型变量

4.类型转换 

4.1自动类型转换(隐式)

4.2强制类型转换(显式)

 5.字符串类型


1. 字面常量

字面常量的分类:
1. 字符串常量:由 "" 括起来的,比如 “12345678” “hello word” 你好
2. 整形常量:程序中直接写的数字 ( 注意没有小数点 ) ,比如: 123 100
3. 浮点数常量:程序中直接写的小数,比如: 3.14 0.49
4. 字符常量:由 单引号 括起来的当个字符,比如:‘a’、 ‘1’
5. 布尔常量:只有两种 true false
6. 空常量: null

注意:字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。  

2. 数据类型

Java 中数据类型主要分为两类: 基本数据类型 引用数据类型
基本数据类型有四类八种:
1. 四类:整型、浮点型、字符型以及布尔型
2. 八种:
数据类型
关键字
内存占用
内存占用
字节型
byte
1 字节
-128 ~ 127
短整型
short
2 字节
-32768 ~ 32767
整型
int
4 字节
-2^32~2^31-1
长整型
long
8 字节
-2^63~2^63-1
单精度浮点数
float
4 字节
有范围,一般不关注
双精度浮点数
double
8 字节
有范围,一般不关注
字符型
char
2 字节
0 ~ 65535
布尔型
boolean
没有明确规定
true false
注意:
(1)不论是在 16 位系统还是 32 位系统, int 都占用 4 个字节, long 都占 8 个字节
(2)整形和浮点型都是带有符号的
(3)整型默认为 int 型,浮点型默认为 double

 3.包装类

包装类指的是,基本数据类型对应的类类型。因为基本数据类型无法进行对象化处理,所以就引入了包装类。

8种基本数据byte、short、int、long、 float、double、char、boolean。除了int对应的是Integer,char对应的是Character。其余都是首字母大写即可。

3. 变量 

定义变量的语法格式为:
数据类型 变量名 = 初始值 ;

3.1 整型变量

举例:

在定义时给出初始值
int a = 10 ;
System . Out . println ( a );
在定义时没有给初始值,但使用前必须设置初值
int b ;
b = 10 ;
System . Out . println ( b );  
注意事项:
1. int 不论在何种系统下都是 4 个字节
2. 推荐使用方式一定义,如果没有合适的初始值,可以设置为 0
3. 在给变量设置初始值时,值不能超过 int 的表示范围,否则会导致溢出
4. 变量在使用之前必须要赋初值,否则编译报错
5. int 的包装类型为 Integer

对于注意3细说:

不只是int,在java中,当你赋值字面常量值时,一旦超过变量能储存的最大值时,是会自动编译报错的。

但这种情况不会报错,但会溢出。

 

 

 3.2 长整型变量

举例
long a=100;
long b=100L;
System.out.println(a);
System.out.println(b);

基本数据类型a与b无区别,在变量能储存的范围内,低精度到高精度会自动转化。

但包装类数值后必须加L\l,不然报错。

注意事项:
1. 长整型变量的初始值后加 L 或者 l ,推荐加 L(如:10l容易被看成101)。
2. 长整型不论在那个系统下都占 8 个字节。

3.3 短整型变量 

short a = 10 ;
System . Out . println ( a );
// short 型变量所能表示的范围:
System . Out . println ( Short . MIN_VALUE );
System . Out . println ( Short . MAX_VALUE );

 

注意事项:
1. short 在任何系统下都占 2 个字节
2. short 的包装类型为 Short

3.4 字节型变量

举例:
byte a=127;
System.out.println(a);

注意事项:

1. byte 在任何系统下都占 1 个字节
2. 字节的包装类型为 Byte

 byte和short会存在整形提升。

如:

 因为整形提升,编译器会吧a,b会被当作整形类型变量,但在编译的过程中并不知道a,b的大小,存在超出范围的风险,故编译器会认为这是安全隐患,所以报错。

改正:
byte c= (byte) (a+b);
结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误。

3.5双精度浮点型

举例:
double d = 3.14 ;
System . Out . println ( d );
(1)试着做一下这个问题
int a = 1 ;
int b = 2 ;
System . out . println ( a / b ); // 输出 0.5 吗?
原因: 在 Java , int 除以 int 的值仍然是 int( 会直接舍弃小数部分 )
如果想得到 0.5, 需要使用 double 类型计算 .
(2)再着做一下这个问题
double a=1.1;
System.out.println(a*a);// 输出 1.21 吗?

并不是

原因:无论是float,double都不是精确的,只能精确到小数后几位。

注意事项:
1. double 在任何系统下都占 8 个字节
2. 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算
3. double 的包装类型为 Double 
4. double 类型的内存布局遵守 IEEE 754 标准 ( C 语言一样 ), 尝试使用有限的内存空间表示可能无限的小数 , 势 必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。

3.6 单精度浮点型  

float num = 1.0f ; // 写作 1.0F 也可以
System . out . println ( num );
不加f/F会报错。
flfloat 类型在 Java 中占四个字节 , 同样遵守 IEEE 754 标准 . 由于表示的数据精度范围较小 , 一般在工程上用到浮点数 都优先考虑 double, 不太推荐使用 flfloat. flfloat 的包装类型为 Float
 

3.7字符型变量

 举例:

char c1 = 'A' ; // 大写字母
char c2 = '1' ; // 数字字符
System . out . println ( c1 );
System . out . println ( c2 );
// 注意:
java 中的字符可以存放整形
char c3 = ' ' ;
System . out . println ( c3 );
注意事项 :
1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值 .
2. 计算机中的字符本质上是一个整数 . C 语言中使用 ASCII 表示字符 , Java 中使用 Unicode 表示字符 . 因此 一个字符占用两个字节, 表示的字符种类更多 , 包括中文 .

 3.8布尔型变量

boolean b = true ;
System . out . println ( b );
b = false ;
System . out . println ( b );
注意事项:
1. boolean 类型的变量只有两种取值 , true 表示真 , false 表示假 .
2. Java boolean 类型和 int 不能相互转换 , 不存在 1 表示 true, 0 表示 false 这样的用法 .

4.类型转换 

Java 作为一个强类型编程语言 , 当不同类型之间的变量相互赋值的时候 , 会有教严格的校验 .
Java 中,当参与运算数据类型不一致时,就会进行类型转换。 Java 中类型转换主要分为两类:自动类型转换 ( 隐 式) 和 强制类型转换 ( 显式 )

4.1自动类型转换(隐式)

自动类型转换即: 代码不需要经过任何处理,在代码编译时,编译器会自动进行处理 。特点: 数据范围小的转为数 据范围大的时会自动进行 。(低精度变高精度)
(1)
int a = 100 ;
long b = 10L ;
b = a ; // a b 都是整形, a 的范围小, b 的范围大,当将 a 赋值给 b 时,编译器会自动将 a 提升为 long 类型,然后赋值
a = b ; // 编译报错, long 的范围比 int 范围大,会有数据丢失,不安全
(2)
flfloat f = 3.14F ;
double d = 5.12 ;
d = f ; // 编译器会将 f 转换为 double ,然后进行赋值
f = d ; // double 表示数据范围大,直接将 flfloat 交给 double 会有数据丢失,不安全

4.2强制类型转换(显式)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。(高精度变低精度)
(1)
int a = 10 ;
long b = 100L ;
b = a ; // int-->long ,数据范围由小到大,隐式转换
a = ( int ) b ; // long-->int, 数据范围由大到小,需要强转,否则编译失败
(2)
float f = 3.14F ;
double d = 5.12 ;
d = f ; // flfloat-->double ,数据范围由小到大,隐式转换
f = ( float ) d ; // double-->flfloat, 数据范围由大到小,需要强转,否则编译失败
注意事项:
1. 不同数字类型的变量之间赋值 , 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的 , 需要强制类型转换 , 但是 可能精度丢失
3. 将一个字面值常量进行赋值的时候 , Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换
类型提升小结 :
1. 不同类型的数据混合运算 , 范围小的会提升成范围大的 .
2. 对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算 .

 5.字符串类型

举例:

public static void main ( String [] args ) {
String s1 = "hello" ;
String s2 = " world" ;
System . out . println ( s1 );
System . out . println ( s2 );
System . out . println ( s1 + s2 ); // s1+s2 表示:将 s1 s2 进行拼接
}

试着做一下这个问题

(1)String s1 = "hello";以什么结尾?‘\0’?

答:无结尾标准符。

(2)

int a=10;
int b=20;
System.out.println("a+b="+a+b);
System.out.println("a+b="+(a+b));
System.out.println(a+b+"=a+b");

小结:整形在前 那就默认是整形  要是字符串在前 后面的整形也被默认成字符串了。

以上为我个人的小分享,如有问题,欢迎讨论!!!  

 

 

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

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

相关文章

2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)

文章目录 1. 平移 (Translation)2. 缩放 (Scaling)3. 旋转 (Rotation)4. 错切 (Shearing)5. 镜像 (Reflection) 1. 平移 (Translation&#xff09…

【数学建模】时间序列分析

文章目录 1. 条件2. 模型分类3. SPSS处理时间序列 1. 条件 1.使用于具有时间、数值两种要素 2.数据具有周期性可以使用时间序列分解 2. 模型分类 叠加模型【YTSCI】 序列的季节波动变化越来越大,反映变动之间的关系发生变化乘积序列【YTSC*I】 时间序列波动保持恒…

【致敬未来的攻城狮计划】第3期 作业汇总贴 + 获奖公布(文末荐书)

目录 一、写在前面 二、种子学员介绍 三、作业贴汇总 四、小小总结 五、获奖公布 六、学员有话说 七、特别致谢 八、友情荐书 一、写在前面 时间过得真快,距离 【致敬未来的攻城狮计划】第3期 的发起,已经过去有些时间了,让我们一起…

opencv对相机进行畸变矫正,及矫正前后的坐标对应

文章目录 1.背景2.需求分析3.解决方案3.1.镜头畸变矫正3.2.知道矫正后的画面坐标(x,y),求其在原画面的坐标(x,y)3.2.知道原画面坐标(x1,y1),求其在…

jQuery的DOM操作之笔记总结

jQuery的DOM操作之笔记总结 首先我们来介绍一下什么是DOM 简述: 1.DOM全称Document Object Model(文档对象模型)。 2.每个文档都是一棵DOM结构的树,文档里的很多元素,就像树上的很多节点,或是分叉的树枝…

集成学习——Boosting算法:Adaboost、GBDT、XGBOOST和lightGBM的简要原理和区别

1、Boosting算法 Boosting算法是通过串联的方式,将一组弱学习器提升为强学习器算法。它的工作机制如下: (1)用初始训练集训练出一个基学习器; (2)依据基学习器的表现对训练样本分布进行调整&…

WPF实现DiagramChart

1、文件架构 2、FlowChartStencils.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:s"clr-namespace:DiagramDesigner"xmlns:c&…

算法通关村第一关-链表白银挑战笔记|公共子节点

两个链表公共子节点问题 提示&#xff1a;大家都在做什么&#xff1f; 不做什么。就是等夏天结束 文章目录 两个链表公共子节点问题前言题目&#xff1a;提供四种解决方法的思路&#xff1a;拿到题目要怎么思考&#xff1a;审题哈希表或集合实现使用栈来实现拼接字符串实现 (组…

短视频矩阵源码开发搭建分享--多账号授权管理

目录 文章目录 前言 一、矩阵号系统是什么&#xff1f; 二、使用步骤 1.创建推广项目 2.多账号授权 3.企业号智能客服系统 总结 前言 短视频多账号矩阵系统&#xff0c;通过多账号一键授权管理的方式&#xff0c;为运营人员打造功能强大及全面的“矩阵式“管理平台。…

从零构建深度学习推理框架-1 简介和Tensor

源代码作者&#xff1a;https://github.com/zjhellofss 本文仅作为个人学习心得领悟 &#xff0c;将原作品提炼&#xff0c;更加适合新手 什么是推理框架&#xff1f; 深度学习推理框架用于对已训练完成的神经网络进行预测&#xff0c;也就是说&#xff0c;能够将深度训练框…

UE虚幻引擎教程_生成云平台指定路径下的exe文件

市面上大量优秀的游戏都是基于UE制作的&#xff0c;UE虚幻引擎制作的作品可以在windows、mac、linux以及ps4、x-boxone、ios、android甚至是html5等平台上运行。本文介绍了UE虚幻引擎如何生成云平台指定路径下的EXE。 一、云平台会运行打包文件夹下指定路径的EXE文件 但有时候…

【多选框、表格全选】element el-checkbox、el-table

话不多说 先看效果&#xff1a; 多选框&#xff1a; 表格全选&#xff1a; <template><div><div class"titleLabel"><div class"lineStyle"></div>统计部门</div><div style"display: flex"><e…

项目开启启动命令整合

启动RabbitMQ管理插件 1.启动 RabbitMQ 管理插件。 rabbitmq-plugins enable rabbitmq_management rabbitmq-server # 直接启动&#xff0c;如果关闭窗⼝或需要在该窗⼝使⽤其他命令时应⽤就会停⽌ rabbitmq-server -detached # 后台启动 rabbitmq-server start # 启⽤服务 rab…

(二)安装部署InfluxDB

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 2 章 安装部署InfluxDB 1、linux 安装方式如下 通过包管理工具安装&#xff0c;比如apt 和yum直接下载可执…

springboot()—— 集成redis

1、新建一个springboot项目 2、添加redis依赖包 可以在新建项目的时候就选上 也可以建完项目以后手动导入pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </d…

2023年基准Kubernetes报告:6个K8s可靠性失误

云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面&#xff0c;但大多数组织预计今年的云使用和支出将与计划的相同&#xff08;45%&#xff09;&#xff0c;或高于计划的&#xff08;45%&#xff09;…

装饰模式-扩展系统功能

买了新车后&#xff0c;不少人会对车进行装饰&#xff0c;比如给车贴膜&#xff0c;喷上骚粉的漆等。某天&#xff0c;小李和小张都买了辆车&#xff0c;小李想给车贴膜&#xff0c;小张想给车先喷漆然后再贴膜。现在中的做法是&#xff0c;把车开到改装店&#xff0c;如果要喷…

浏览器调试Android App

浏览器调试Android App 1. 背景2. 调试工具3. 手机设置4. 打开浏览器(edge)5. 连接手机6. 点击inspect 开始调试 1. 背景 在工作中经常会遇到在原生app中嵌套h5&#xff0c; 但是在某些需要在app里面调试的内容&#xff0c; 却没有像chrome开发者工具这样的工具来帮助我们快速…

react 在build读取env 数据

默认会读取.env 文件 npm install dotenv --save npm install dotenv-cli --save-dev例如读取.env.test "build:test": "dotenv -e .env.test react-app-rewired build",.env.test REACT_APP_CURRENTMODE devREACT_APP_Public_Path "https://baid…

[NLP]使用Alpaca-Lora基于llama模型进行微调教程

Stanford Alpaca 是在 LLaMA 整个模型上微调&#xff0c;即对预训练模型中的所有参数都进行微调&#xff08;full fine-tuning&#xff09;。但该方法对于硬件成本要求仍然偏高且训练低效。 [NLP]理解大型语言模型高效微调(PEFT) 因此&#xff0c; Alpaca-Lora 则是利用 Lora…