文章由《大牛1对1》书写,保留所有权利,如有转载请注明来源。
如果你对内容有更好的建议,请联系我们。
我们平常所说的汉字、数字等在Java中都是一种数据。Java是一种强数据类型的编程语言,也就是说每种数据的类型是十分确定的,比如“你好”是字符串类型,“123”是数值类型。
在本章我们将学习8个Java的基本数据类型。
4.1 数据存储
在生活中,我们可以把汉字写到纸张上。那么在计算机中,我们把数据写到了硬盘中。纸张上的汉字是以笔画图形展现的,而硬盘中的数据是用“0101”这样的二进制存储的。
计算机的是使用二进制表示信息,其存储单元是位(bit),又称为比特位,用小写字母b表示,每一个位表示0或1,你可以把一位想象成一个小格子。
如果我们使用1个比特位存储信息,那么只能存储“0”或“1”;如果我们使用2个比特位存储信息,那能存储“00”、“01”“10”“11”四个数据了。也就是说,随着位数的增加所能存储的信息也在增加。
在计算机中,8个比特位组成一个字节(Byte),可理解为8个小格子组成一个字节,字节使用大写字母B表示。
以后我们在存储信息时,可以说1个B的范围,也就是8个比特位,那么能够表示的信息就时2的8次方个数据,这是比较大的了。
在Java中,每种数据类型都分配了不同的空间,也就是说每种数据类型分配的字节数量不同,所以表示数据的大小也不同。
根据表示数据的类型和使用字节的大小,Java设计了8个基本数据类型。
4.2 整数类型
不同的整数类型被分配了不同的空间,其表示数据的大小也不一样。根据占用内存空间的不同,整数类型分为:byte(字节)、short(短整型)、int(整型)、long(长整型)。
定义整型数据时默认是int类型。long型的声明要在数值最后加上大写L。
每一种数据类型所占用的字节数和能够表示的范围如上表。对于比如字节型byte,你或许会疑惑,为何表示范围是-128~127,这涉及到了原码、反码、补码的概念,在此我们不做详细叙述,如有兴趣可网上搜索研究。
声明整数类型时,比如你把短整型short类型的一个数据32767,声明成字节型byte,就会出现如下提示:
Type mismatch: cannot convert from 应有范围名 to 现在范围名
下面是各种整数类型的使用示例,代码如下:
package com.chapter4;
public class NumberType {
public static void main(String[] args) {
/*
字节型 范围:-128到127
*/
byte bt = -128;
System.out.println(bt);
/*
短整型 范围:-32768到32767
*/
short st = -32768;
System.out.println(st);
/*
整型 范围:-2 147 483 648到2 147 483 647
*/
int it = -2147483648;
System.out.println(it);
/*
长整型 范围:-9223372036854775808~到9223372036854775807
*/
long lg = -9223372036854775808L;
System.out.println(lg);
}
}
运行结果:
-128
-32768
-2147483648
-9223372036854775808
4.3 浮点类型
你是否看过一个短视频,一位小学生把0.9加0.1的结果写成了1,而老师给了大大的叉号,并且父母也在纠结到底哪儿错了。
0.9是带小数点的,准确的说是浮点类型,0.1也是浮点类型,那么他们的结果也是浮点类型,就是说结果应该是1.0。1和1.0有什么不一样吗,有的,1是字节型byte整数类型,1.0是浮点类型。
浮点类型表示的是带小数的数据类型,有double和float两种,double占8个字节,是双精度数据类型,float占4个字节,是单精度数据类型。
定义浮点数时默认是双精度类型。
float类型的数值后边应加上后缀F,double类型的数值后边应加上后缀D。
下面就演示一下两种浮点类型的表示范围,代码如下:
package com.chapter4;
public class DoubleFloatType {
public static void main(String[] args) {
/*
double占8个字节,是双精度数据类型
float占4个字节,是单精度数据类型
*/
// 定义一个双精度数据类型
double db = 1.123F;
System.out.println(db);
// 定义一个单精度数据类型
float ft = 1.123F;
System.out.println(ft);
}
}
运行结果:
1.1230000257492065
1.123
4.4 字符类型
每个国家地区有自己的字符,比如中文“你”、“我”,或是英文的“a”、“z”,或是各种特殊符号“!”、“¥”。随着互联网的发展,科学家们基于各个国家语言可能出现的符号和文字,并将为他们编号,最后形成一种Unicode规则的字库,这就是Unicode编码。它在1990年开始研发,1994年正式公布。
char字符类型占16个比特位,2个字节,采用Unicode编码。最小值是 \u0000(即为0),最大值是 \uffff(即为65,535)。
char可以表示0-65535的数值,每个数值对应一个字符,涵盖了各个国家可能出现的符号和文字,在Java中,这些符号和文字需要使用英文单引号括起来。
示例代码:
package com.chapter4;
public class CharType {
public static void main(String[] args) {
// 声明一个字符
char ch = 'a';
System.out.println(ch);
int it = 100;
//本质是字符a的数值+100
System.out.println(ch + it);
// 声明一个字符
char gender = ‘男’;
System.out.println(gender);
}
}
运行结果:
a
197
字符a在ASCII 码的数值是97,所以上述加的结果是197。
转义字符
如回车、换行等字符,需要使用转义字符表示,是用斜杠开头的。
部分转义字符:
示例代码:
package com.chapter4;
public class CharEscape {
public static void main(String[] args) {
// 定义字符类型
char ch = 'a';
System.out.println(ch);
// 定义转义字符,回车
char enter = '\r';
System.out.println(enter);
char chr = 'b';
System.out.println(chr);
}
}
运行结果:
a
b
可以看到,在a和b之间有一个空行,这个就是转义字符回车的效果。
4.5 布尔类型
布尔boolean这种数据类型其值有两个,即"真"与"假",在Java中使用true或false表示。
布尔类型占8个比特位,1个字节。
示例代码:
package com.chapter4;
public class Boolean {
public static void main(String[] args) {
// 定义一个true
boolean flag = true;
System.out.println(flag);
}
}
运行结果:
true
4.6 数据类型转换
在实际编程工作中,常遇到需要对数据类型进行转换。比如两个整数相除,其结果是小数时,而要求是输出其整数部分。
数据类型转换分为自动类型转换、强制类型转换。
自动数据类型转换
两个变量A、B,A的表示表示数据范围小,B的表示范围大,当把A的值赋值给B时,叫做自动类型转换。
数据类型的表示数据范围由小到大如下图:
示例代码:
package com.chapter4;
public class AutoConversion {
public static void main(String[] args) {
int number = 10;
/*
int 的数据范围小
double 的数据范围大
此时进行的是自动转换
*/
double db = number;
System.out.println(db);
}
}
运行结果:
10.0
强制数据类型转换
两个变量A、B,A的表示数据范围大,B的表示范围小,当把A的值赋值给B时,叫做强制类型转换。强制数据类型转换会出现数据损失问题。强制类型转换的顺序与自动类型转换正好相反。
强制类型转换的格式:
目标数据类型 变量名 = (目标数据类型)需要转换的值
示例代码:
package com.chapter4;
public class ForcedConversion {
public static void main(String[] args) {
double number = 10.456;
System.out.println(number);
/*
int 的数据范围小
double 的数据范围大
此时进行的是强制转换
*/
int it = (int) number;
System.out.println(it);
}
}
运行结果:
10.456
10
由结果我们可以看出,0.456被丢失了,这就是强制类型转换时的数据丢失问题。
4.7 总结
总结
计算机使用二进制存储数据,存储单元是bit,8bit是一个Byte。
Java有8种基本数据类型,每种使用的存储空间不同,其表示的范围也不同。
整数类型分为:byte、short、int、long。
浮点类型分为:double、float。
字符类型采用Unicode编码,表示0-65535的数值,对应65535个字符。
布尔数据类型在Java中使用true或false表示。
数据类型转换分为自动类型转换、强制类型转换。
数据范围从小到大的转换称为自动类型转换,从大到小的转换称为强制类型转换,强制类型转换存在数据丢失问题。
4.8 思考与作业
思考一:年龄是哪种数据类型,姓名是哪种数据类型,圆周率是哪种数据类型?
思考二:整数类型、浮点类型为何不是一种,而是多种?
作业一:使用字符类型表示性别,并输出。
作业二:寻找一个自动类型转换的场景。
作业三:熟练记住Java的8种基本数据类型和自动转换类型的顺序。
文章由《大牛1对1》书写,保留所有权利,如有转载请注明来源。
如果你对内容有更好的建议,请联系我们。