IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java中的基本数据类型 -> 正文阅读

[Java知识库]Java中的基本数据类型

一、变量和数据类型

1.1 变量
1.2 整型
1.3 长整型
1.4 短整型
1.5 双精度浮点型
1.6 单精度浮点型
1.7 字符类型
1.8 字节类型
1.9 布尔类型
1.10 字符串类型
1.11 变量的作用域
1.12 变量的命名规则

二、常量

2.1 字面值常量
2.2 final关键字修饰的常量
2.3 理解类型转换
2.4 理解数值提升
2.5 int和String之间的相互转换

一、变量和数据类型

1.1 变量

变量指的是程序运行时可变的量,相当于开辟一块内存空间来保存一些数据,只有在程序运行时才能知道变量的值.

1.2 整型

基本语法格式:

int 变量名 = 初始值;
//例:
int num = 10;//定义一个名为num的整型变量,num的值初始化为10

Java中int类型占4个字节,即32个比特位,与操作系统无关

Q:什么是字节?
A:字节是计算机中表示空间大小的基本单位。我们都知道,计算机通过二进制来存储数据,一个二进制数称为一个比特位(bit),我们认为8个bit为一个字节(Byte),即一个八位的二进制数就是一个字节。
字节的单位:
1Byte = 8bit
1KB=1024Byte
1MB=1024KB
1GB=1024MB

Q:既然一个int占用32个比特位,那32个比特位能表示的取值范围是多大呢?
A:Java中二进制最高位为符号位,其余位为数值位(在Java中不存在无符号类型的变量),则int类型1位符号位和31位数值位共同决定了整型变量的取值范围,如下图:
请添加图片描述
使用如下代码来查看Java中整型变量的表示范围:

System.out.println(Integer.MAX_VALUE); //int类型的最大值
System.out.println(Integer.MIN_VALUE); //int类型的最小值
//结果:
2147483647
-2147483648

1.3 长整型

基本语法格式:

long 变量名 = 初始值;
//例:
long num = 10L;

注意:定义long类型变量时如果省略后面的L,变量将被定义为int类型。

在Java中,long类型占用8个字节,与int 类型同理,long类型的范围为:
-2^63到 2^63-1.
使用如下代码查看long类型的取值范围:

System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
//结果:
9223372036854775807
-9223372036854775808

很显然,这个结果比int类型变量的范围大得多

1.4 短整型

基本语法格式:

short 变量名 = 初始值;
//例:
short num = 10;

短整型变量在Java中占用两个字节,表示范围为-32768~+32767,这个范围相对较小,一般不推荐使用.
查看short类型表示范围的代码:

System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
//结果:
32767
-32768

1.5 双精度浮点型

基本格式:

double 变量名 = 初始值;
//例:
double num = 1.0;

在Java中,两个整型变量相除得到的结果会舍弃掉小数点后的值,如:

int a = 1;
int b = 2;
System.out.println(a/b);
//结果:
0

如果想要得到小数,需要定义浮点型变量:

double a = 1.0;
double b = 2.0;
System.out.println(a/b);
//结果:
0.5

Java中的double虽然也是8个字节,但是浮点数的内存布局和整数差别很大,不能单纯用2^n来表示范围.
Java中double类型内存布局遵守IEEE754标准,尝试用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差,如:

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

1.6 单精度浮点型

基本语法格式:

float 变量名 = 初始值;
//例:
float num = 1.0f;

定义float类型时,初始值后的f也可以写作F,如果省略f,变量将被定义为默认的double类型.
float类型在Java中占4个字节,同样遵守IEEE标准,由于表示的精度范围较小,一般在工程中不推荐使用,一般优先考虑double类型.

1.7 字符类型

基本语法格式:

char 变量名 = 初始值;
//例:
char ch = 'A';

Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一
个字符占用两个字节, 表示的字符种类更多, 包括中文.
关于字符编码方式的讨论, 参见
https://zhuanlan.zhihu.com/p/35172335

1.8 字节类型

基本语法格式:

byte 变量名 = 初始值;
//例:
byte value = 0;

字节类型表示的也是整数. 只占一个字节, 表示范围较小 ( -128 ~ +127 )
字节类型是Java中可用的最小整数数据类型.
当程序使用其值在-128到127范围内的大量变量或在文件或网络中处理二进制数据时,使用字节变量.

1.9 布尔类型

基本语法格式:

boolean 变量名 = 初始值;
例:
boolean value = true;

boolean 类型的变量只有两种取值, true 表示真, false 表示假.
Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定.

1.10 字符串类型

基本语法格式:

String 变量名 = "初始值";
//例:
String name = "zhangsan";

Java 使用 双引号 + 若干字符 的方式表示字符串字面值.
上面八种统称为Java中的基本数据类型,String 不是基本类型, 而是引用类型
字符串中的一些特定的不太方便直接表示的字符需要进行转义.
常见的转义字符有:

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

字符串的+操作用来拼接两个字符串:

String a = "hello "; 
String b = "world!"; 
String c = a + b; 
System.out.println(c); 

结果:

hello world!

还可以用字符串和整数进行拼接:

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

以上代码说明, 当一个 表达式中存在字符串的时候, 加号始终执行字符串拼接行为.

1.11 变量的作用域

变量的作用域指的是变量能生效的范围,一般指的是变量所在的代码块

class Test { 
 public static void main(String[] args) { 
 { 
 int x = 10; 
 System.out.println(x); // 编译通过; 
 } 
 System.out.println(x); // 编译失败, 找不到变量 x. 
 } 
} 

1.12 变量的命名规则

硬性指标:
1.一个变量名只能包含数字, 字母, 下划线
2. 数字不能开头.
3. 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量.
注意: 虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做
软性指标:
1.变量命名要具有描述性, 见名知意.
2.变量名不宜使用拼音(但是不绝对).
3.变量名的词性推荐使用名词.
4.变量命名推荐 小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写.


二、常量

常量包括字面值常量和final修饰的变量,常量在程序运行的过程中不可以修改,在程序编译时已经确定其值.
常量主要有如下两种体现形式:

2.1 字面值常量

10int 字面值常量(十进制)
010int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10Llong 字面值常量. 也可以写作 10l (小写的L)
1.0double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0float 字面值常量, 也可以写作 1.0F
trueboolen 字面值常量, 同样的还有 false
‘a’char 字面值常量, 单引号中只能有一个字符
“abc”String 字面值常量, 双引号中可以有多个字符.

2.2 final关键字修饰的变量

final int a = 10; 
a = 20; // 编译出错. 提示 无法为最终变量a分配值

在定义变量时,在变量类型前加上final,则该变量可看作一个常量,其值无法再改变

2.3 理解类型转换

整型和双精度浮点型的转换:

int a = 10;
double b = a;	//编译通过
double a = 10.0;
int b = a;	//编译不通过,提示从double转换到int可能会有损失

Q:上述结果出现的原因是什么?
A:由于double类型的变量占用的字节数大于int,int类型所占的空间无法存放double类型的变量,因此不能将double类型的变量赋值给int,而double类型所占空间足够存放int类型的变量,所以可以将int类型的变量存放给double.

结论:不同类型之间的变量进行赋值,表示范围小的类型可以转换成表示范围大的类型,反之则不行.

整型和布尔类型的转换:

int a = 10;
boolean b = true;
b = a;	//编译不通过,提示不兼容的类型,int无法转换为boolean
a = b;	//编译不通过,提示不兼容的类型,boolean无法转换为int

int 字面值常量给byte类型赋值:

byte = 127;	//编译通过
byte = 128;	// 编译报错, 提示 从int转换到byte可能会有损失

由于byte类型在Java中占一个字节,范围为-128~127,127在范围内,128就超出了范围.
在使用字面值常量进行赋值时,Java会自动进行检查校验,判定赋值是否合理.

2.4 强制类型转换

int a = 0; 
double b = 10.5; 
a = (int)b; 
int a = 10; 
boolean b = false; 
b = (boolean)a; // 编译出错, 提示不兼容的类型

使用 (类型) 的方式可以将 double 类型强制转成 int. 但是强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
强制类型转换不一定能成功, 互不相干的类型之间无法强转.

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); 

2.5 理解数值提升

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

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

byte和byte的运算

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

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

由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算.

正确写法:

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

总结:
不同类型的数据混合运算, 范围小的会提升成范围大的.

对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.


The end

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:03:18  更:2021-10-21 12:04:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:59:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码