先讲个笑话:String 是JAVA的基本数据类型,相信很多人都看过这个笑话,但是你在笑话别人的同时,真的了解JAVA基本数据类型吗?
首先上一张图:
这张图清晰地展示了JAVA的 8 种数据类型的字节、取值范围、以及默认值。
其中基本数据类型又可以分为三大类:
数值型(整数类型:byte、short、int、long;浮点类型:float、double)
字符型(char)
布尔型(boolean)
基本数据类型使用的选择:
相信很多初学者对于基本数据类型的选择都有一定的疑惑,比如我要定义一个 年龄值 我该用 byte ? short ? int ?long ?我定义一个小数用 float ?double ?
默认使用规则:整数用 int ;小数用 double ;逻辑控制用 boolean ;有中文时用 char ;
初始化和赋值:
所有的基本数据类型的初始化和赋值都遵循一个公式:
//数据类型 变量名 = 值(或者是其他变量);
int i = 1000;
数据溢出:
从文章开头的表格可以看到,每个基本数据类型都有一个自己的取值范围,那么有的小伙伴就要问了,假如我超出了范围会发生什么?那么这就涉及到一个数据类型溢出的问题了,先来看一小段测试代码:
public static void main(String[] args) {
int i=128;
byte b= (byte) i;
System.out.println(b);
//输出结果为 -128
}
首先我们用 int 类型保存了一个超过了 byte(-128~127) 范围的数值,然后把 int 值赋值给 byte(这里需要强制转换类型:把范围大(大容器)的数据类型的数值赋值给范围小(小容器)的数据类型需要进行强制类型转换,反之则不用) ,可以发现输出结果:-128,这不是 byte 的最小范围嘛? YES ! 如果 int 值是129,那么对应的输出结果会是 -127 ,相信聪明的小伙伴已经知道数据溢出会发生什么了!(当然这里建议在写代码的时候就应该预估好数据范围,避免出现这种溢出的情况)
运算时的数据类型:
学过JAVA运算符的小伙伴一定知道,两个 int 值进行一个除法运算后,最终得到的结果会是一个舍弃了小数位的整数,那么我们想要获取到后面的小数应该怎么来写呢?看代码:
public static void main(String[] args) {
int a = 3;
int b = 2;
//输出结果为 1
System.out.println(a / b);
//输出结果为 1.5
System.out.println((double) a / b);
}
可以看到,只需要把其中一个 int 值强制转换成 浮点型( float 或 double ),就可以得到一个小数。得出结论:计算时如果运算中有 浮点型 的数值参与,那么所得到的结果会也会是 浮点型。
字符型和 ASCII 的孽缘:
在我刚学JAVA的时候,这个 char 类型可把我整得挺懵。。。不多说先看一小段代码:
public static void main(String[] args) {
char c = 'A';
int i = c;
//输出结果 65
System.out.println(i);
//输出结果 A
System.out.println((char) i);
}
JAVA 字符编码规则:只需要记住 ‘A’=65、‘a’=97、‘0’=48,然后往后推算即可!
大写字母:65=‘A’、66=‘B’、67=‘C’…
小写字母:97=‘a’、98=‘b’、99=‘c’…
数字:48=‘0’、49=‘1’、50=‘2’…
番外篇:String字符串
问题:String是基本数据类型吗?它可以被继承吗?
答案:String 是 引用类型 而不是基本数据类型,底层是用char数组实现的,并且是 final 类,我们都知道在JAVA中被 final 修饰的类都是不可被继承的。
关于字符串和基本数据类型的连接:
关于字符串(+)号的使用,也是搞懵了很多JAVA初学者,经常会出现一些小错误,就像如下代码,如果照第一种方式输出,那么两个 int 值会一个个自动转化成字符串加到 str 后面,而不是很多时候想要的 先让两个数值进行运算,所以这里我们需要借助一下小括号的帮助,先让两个 int 数值进行运算(这里遵循数学的运算规则)再加到 str 上。
public static void main(String[] args) {
int chinese = 100;
int english = 1;
String str = "我的总成绩是:";
//输出结果: 我的总成绩是:1001
System.out.println(str + chinese + english);
//输出结果: 我的总成绩是:101
System.out.println(str + (chinese + english));
}