文章目录✍️大家好,我是枫晨,今天继续带大家初识Java,今天除了正文外,我还要推荐一本书籍《java核心技术 卷1》非常适合初学者
🖥️专栏推荐:
C语言专栏:C语言学习教程
Java专栏 :初识JavaSE系列
- 一、字面常量
- 二、数据类型
- 三、变量
- 3.1整形
- 3.2浮点型:
- 3.2字符类型
- 3.4布尔类型
- 3.5数值类型之间的转换
- 3.5.1隐式类型转换
- 3.5.2显式类型转换
- 3.6类型提升
一、字面常量
简单来说就是程序运行期间,固定不变的量。
字面常量分类:
二、数据类型字符串常量:由""括起来的,比如“12345”、“hello”、“你好”。
整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000
浮点数常量:程序中直接写的小数,比如:3.14、0.49
字符常量:由 单引号 括起来的当个字符,比如:‘a’ ‘b’
布尔常量:只有两种true和false
空常量:null(后面了讲)
首先要明白,java中数据类型分为基本数据类型和引用数据类型
其中基本数据类型共有4类共8种:
4类:整形、浮点型、字符型、布尔型
8种:字节型,短整形,长整形,浮点型,双精度浮点型,字符型,布尔型
基本数据类型 | 关键字 | 大小 | 取值范围 |
---|---|---|---|
字节型 | byte | 1字节 | -128~-127 |
短整形 | short | 2字节 | -215~-215-1 |
整形 | int | 4字节 | -231~231-1 |
长整型 | long | 8字节 | -263~263-1 |
浮点型 | float | 4字节 | 特殊 |
双精度浮点型 | double | 8字节 | 特殊 |
字符型 | char | 2字节 | 0 ~ 65535 |
布尔型 | boolean | 没有明确规定 | true或者false |
三、变量 3.1整形与C语言不同,int类型不论是在32/64位机器,其大小均为4个字节,long都占8个字节。
整形和浮点型 都是有符号数
整形默认为int型,浮点型默认为double,在定义float类型变量时候必须在数字后面加上f/F;
1.在java中,int、short、long均为有符号类型,不存在c语言中的无符号类型byte和short类型更加适合用于底层文件的处理。
2.java可移植性体现:
整型的范围与运行 Java 代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同 *** 作系统之间进行移植给程序员带来的诸多问题。与此相反,C 和 C++ 程序需要针对不同的处理器选择最为高效的整型, 这样就有可能造成一个在32 位处理器上运行很好的 C 程序在 16 位系统上运行却发生整数溢出。由于 Java 程序必须保证在所有机器 L都能够得到相同的运行结果, 所以各种数据类型的取值范围必须固定。
3.long类型使用注意事项:长整型数值有一个后缀L或l如:100L;
3.2浮点型:三个特殊的浮点数值:
**·**正无穷大
**·**负无穷大
**·**NaN(不是一个数字)
举个栗子:一 个正整数除以 0 的结果为正无穷大。计算 0/0 或者负数的平方根结果为 NaN
在《java核心技术 卷1》中有这样一个警告:
3.2字符类型计算两个数相除时候,当参与 / 运算的两个 *** 作数都是整数时, 表示整数除法;否则, 表示浮点除法。 整数的求余 *** 作(有时称为取模) 用 % 表示。例如,15/2 等于 ,7 15%2 等于 1 , 15.0/2 等于 7.50
1.与c语言中的char类型不同,java中的char类型是2个字节,这意味着java中的char可以表示中文
2.char类型不用用于表示负数,当将一个整数赋值给char类型时候,这个整数如果在char类型取值范围内,则会对应Unicode字符集中对应数字对应的字符
3.c语言中使用的是ASCII码字符集,而java中使用的是Unicode字符集
boolean (布尔)类型有两个值:false 和 true, 用来判定逻辑条件 整型值和布尔值之间不能进行相互转换
java中不存在0表示假,非0表示真的用法。
Java虚拟机规范中,并没有明确规定boolean占几个字节
3.5数值类型之间的转换Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验.
int a = 10;
long b = 100L;
b = a;//存在隐式类型提升
a = b;//编译失败
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。
3.5.1隐式类型转换自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
特点:数据范围小的转为数 据范围大的时会自动进行。
float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
3.5.2显式类型转换
强制类型转换:当进行 *** 作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的
int a = 10;
long b = 100L;
a =(int) b;//使用强制类型转换
值得注意的是,布尔类型无论是数据范围大还是小之间的转换,都是不合理的
int a = 0;
boolean flag = true;
a = flag; // 编译失败:类型不兼容 flag = a; // 编译失败:类型不兼容
特殊:
int i = 10;
float f = 19.9f;
i = f;//编译器会报错
i =(int)f;
虽然float与int都是4个字节,但是float类型能表示数据的宽度除了整数还能表示小数,这样直接将一个浮点数给一个整数,会出现问题,如果想实现,使用强制类型转换。
同样,将int类型值赋值给float类型,也可能会失去一定精度,因为float在内存中有一定区域是用于存储小数的,当int数据大于了float类型用于存储整数的区域时,可能会失去一定精度。
3.6类型提升注意事项:
不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
强制类型转换不一定能成功,不相干的类型不能互相转换
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
1.int与long之间:int会被提升为long
int a = 10;
long b = 20L;
int c = a+b;//err-编译出错
long d = a+b;//编译成功 a + b==>int + long--->long + long 赋值给long
解析:
int c = a +b;–>a+b==>int + long ===> long + long 赋值给int时会丢失数据
解决编译报错问题:
int c = (int) a +b;
2.byte与byte计算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c); // 编译报错 错误: 不兼容的类型: 从int转换到byte可能会有损失
结论 :
byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short这种低于 4 个字节的类型, 会先提升成 int, 再参与计算
解决办法:
byte c =(byte) a + b;//编译成功
到这里我们的初识java第二篇就结束啦,真的强力推荐大家在阅读完我的文章以后再去深入阅读《java核心卷 Ⅰ》这本书,我只是带着大家渐入佳境,这本书可以带着大家更加深入。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)