JavaSE ---01 数据类型与运算符

简介: JavaSE ---01 数据类型与运算符

正所谓温故而知新,可以为师矣,虽然已经学过一遍javase,但是回头复习仍然能找到很多初学的时候遗忘的点,所以我们在学习的途中还是要保持空杯心态,这样才能走的更远,切忌眼高手低.

1.变量

说到变量大家都经常去使用,那么什么是变量呢?下面给出变量的定义

变量指的是程序运行时可变的量. 相当于开辟一块内存空间来保存一些数据.

类型则是对变量的种类进行了划分, 不同的类型的变量具有不同的特性.

我们所讨论的"变量" 主要和我们的"内存" 这样的硬件设备密切相关

2.基本数据类型 (8个)

int     4
//注:int在java中与系统无关,都是4个字节
byte    1
float   4
double  8
long    8
char    2
boolean //java本身没有规定大小
short   2

2.1 int类型

int类型是4个字节 大小范围也就是 -2^31 - 2^31-1

System.out.println(Integer.MAX_VALUE); // int 的最大值
System.out.println(Integer.MIN_VALUE)//   int的最小值

注:这里的Integer我们可以暂且认为是int的包装类,可以先不去管他.

如果超出int的取值范围,也会发生溢出的情况,下面我们就可以使用更大的数据类型long(长整型)

2.2 long 长整型

 语法

long num = 10L; // 定义一个长整型变量, 初始值写作 10l 也可以(小写的 L, 不是数字1). 
System.out.println(num)

2.3 double 浮点型

注:java中int除以int仍然是int ,比如1/2 答案是0

double num = 1.1;
System.out.println(num * num)
// 执行结果
1.2100000000000002

这里小数的存储仍然是IEEE 754标准,所以仍然会有精度误差.

2.4 float数据类型

float num = 1.0f;    // 写作 1.0F 也可以
System.out.println(num);

这里加一个f的原因就是和double区分,但是精度不高,工程上用得不多.一般用double代替.

2.5 char 类型

char ch = 'A';
char a = '牛';

注:这里java中的char使用的是unicode编码而不是ascii编码,所以甚至支持中文,占用2个字节而不是c语言中的1个字节.

2.6 byte类型

这也是c语言没有的类型.

byte a = 10;

注:byte类型和char类型没关系.

2.7 短整型变量

short a = 10;
//不建议使用,因为范围较小

2.8 布尔类型变量

boolean flag = false;

注:java中的boolean类型中只有true和false,不存在0为假其他为真的情况,java中没有规定boolean的大小.

 

3.引用数据类型

3.1字符串类型

字符串拼接操作

String s = "Hello";
String s1 = "World";
String s3 =s + s1; //Hello World

注:

1. Java 使用 双引号+ 若干字符 的方式表示字符串字面值.

2. 和上面的类型不同, String 不是基本类型, 而是引用类型(后面重点解释).

3. 字符串中的一些特定的不太方便直接表示的字符需要进行转义

3.2 常见转义字符

转义字符 解释
\n 换行
\t 水平制表符
\' 单引号
\" 双引号
\\ 反斜杠

3.3 字符串+整数

结果是字符串

String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);
// 执行结果
result = 1020

4.类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验

举例:

int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.
int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a; //通过

大的类型不能赋值给小的类型,小的类型可以赋值给大的类型.

boolean类型不能和int相互转换.

4.1 强制类型转换

int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
boolean b = false;
b = (boolean)a; //报错

结论:
1. 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
2. 强制类型转换不是一定能成功, 互不相干的类型之间无法强转

 

4.2 数值提升

4.2.1 int 和 long 做运算
int a = 10;
long b = 20;
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过.

结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换

 

4.2.2 byte自运算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 编译报错
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte c = a + b;

原因:虽然a和b都是byte,但是加起来的时候会转化为int再相加,将int赋给byte是行不通的

正确写法:(强转)

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

总结:

1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

4.2.3 int 和String直接的转换
int ->String
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);

String ->int

String str = "100";
int num = Integer.parseInt(str);

相关文章
|
运维 监控 关系型数据库
阿里云Serverless高可用架构深度评测:构建稳定高效应用的全面指南
随着云计算技术的迅猛发展,Serverless计算作为一种新兴的、以事件驱动的无服务器架构,正在逐渐改变企业构建、部署和管理应用程序的方式。阿里云,作为全球领先的云服务提供商之一,提供了全面的Serverless解决方案,包括PolarDB MySQL Serverless集群和Serverless应用引擎等产品,致力于帮助用户构建高可用、高弹性、低成本的应用系统。本文将深度评测阿里云的Serverless服务,从产品功能、使用体验、部署常见问题、文档与支持的全面性等维度出发,为开发者和企业提供实用的参考。
276 0
|
安全 Java Go
探索Go语言在高并发环境中的优势
在当今的技术环境中,高并发处理能力成为评估编程语言性能的关键因素之一。Go语言(Golang),作为Google开发的一种编程语言,以其独特的并发处理模型和高效的性能赢得了广泛关注。本文将深入探讨Go语言在高并发环境中的优势,尤其是其goroutine和channel机制如何简化并发编程,提升系统的响应速度和稳定性。通过具体的案例分析和性能对比,本文揭示了Go语言在实际应用中的高效性,并为开发者在选择合适技术栈时提供参考。
|
弹性计算 运维 应用服务中间件
ECS使用有感
ECS使用有感
|
存储 Serverless API
阿里云百炼应用实践系列-10分钟构建能主动提问的智能导购
通过使用阿里云百炼平台,您可以快速构建一个多代理(Multi-Agent)架构的智能导购助手。该助手能够通过多轮互动了解顾客的具体需求,收集详细信息后,利用阿里云百炼的知识检索增强功能或已有的商品数据库进行商品搜索,为顾客推荐最合适的产品。
1530 8
|
运维 DataWorks 监控
DataWorks常见问题之如何批量补数据
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
401 1
|
JavaScript 搜索推荐
js 混合排序(同时存在数字、字母、汉字等)
js 混合排序(同时存在数字、字母、汉字等)
849 0
|
缓存 Java Sentinel
5小步快速集成使用sentinel限流
在微服务系统中,缓存、限流、熔断是保证系统高可用的三板斧。本文通过如下几个小步骤,即可让spring项目快速集成使用sentinel实现系统限流。
5小步快速集成使用sentinel限流
|
XML 存储 Java
五分钟实现pdf分页
抱歉也开始用了这么“标题党”的标题。事情起源于前几天需要把个人资料的pdf文档一页一页的拆出来,好传到相关的网站上。直接截图到word再转pdf比较麻烦,所以想用工具直接转换。结果找了几个pdf阅读器,这类操作都需要会员或收费。作为一名程序员,这么简单的操作还要收费显然是一种羞耻(当然我是不会承认主要是因为qiong的),几分钟就可以代码解决的问题为啥要花钱呢?废话不多说,开搞。
459 0
|
消息中间件 SQL JSON
flink kafka connector源码解读(超详细)
flink kafka connector源码解读(超详细)
859 0
|
SQL Java Go
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)
608 0