1.常量
2.数据类型与变量
3.类型转换
4.类型提升
1.常量
Java中通过sout+enter进行输出,我们可以先随意输出一些数据。
public class Blogdemo {
public static void main(String[] args) {
System.out.println(3.14);
System.out.println(3);
System.out.println(true);
System.out.println('a');
System.out.println("abc");
}
}
输出的这些数据在程序运行期间并不会改变,他们被统一称为常量。
这些就是输出结果,大部分都与C语言相同,如整形、浮点型等。而比较陌生的布尔型、字符串型,我们将在数据类型中讲解。
2.数据类型与变量
Java中数据类型总体分为两部分:基本数据类型、引用数据类型。
基本数据类型包括布尔型、字符型、字节型、短整型、长整型、整型、单/双精度浮点型。
引用数据类型包括数组、字符串等。引用数据类型我们稍后介绍,先看基本数据类型。
(1)整型 短整型 双精度浮点型 字符型
这些与C语言基本相同,定义变量时与C语言也几乎一样。
int a=1;
short b=1;
double c=1.0;
char d='d';
其中整型占四个字节,短整型占两个字节,双精度浮点数占八个字节,字符型占两个字节,我们也能类比C语言轻松算出他们的范围。且不论是十六位还是三十二位整形都占四个字节,其他一样。这就是Java环境的稳定与优点。而无论整型还是浮点型默认是带符号的。类似于c语言中signed int等。
(2)单精度浮点型
Java中整型默认是int型,浮点型默认是double型。而我们想要定义单精度浮点型变量,需要在末尾加一个‘L’(大小写均可,一般加大写)。如:
float a=10L;
一般无特殊要求,我们均用double;
(3)字节型
顾名思义,它只占一个字节。范围是-127~128,相比起来更加节省空间。
(4)布尔类型
这是Java所独有的数据类型。在C语言中,我们用0表示假,非0表示真,而通常我们用1表示真。在Java中,没有这样的概念,我们直接用true表示真,false表示假,而true和false被称为布尔型数据类型。它可以被定义成变量,如:
boolean a=true;
以上就是基本数据类型。
(5)字符串类型
引用数据类型我们先学习字符串数据类型,其余的我们后面再介绍。C语言中我们用字符数组来定义字符串,非常麻烦,在进行传参,修改等操作时十分吃力。所以Java中,我们有字符串这样一个数据类型来方便我们操作。如:
String a="abcde";
此时a是字符串数据类型。
3.类型转换
类型转换分为隐式类型转换和显示类型转换。简单来说就是小转大可以隐式,大转小必须显式。
(1)隐式类型转换
隐式类型转换又称自动类型转换,是我们java编译器自己进行,不需要人工进行操作。而它只会在把数据范围小的数转换为数据大的数时进行。如:
public static void main(String[] args) {
int a=10;
long b=a;
System.out.println(b);
}
此时编译器并未报错,因为long比int范围更大,编译器自己进行了类型转换。
(2)显示类型转换
我们再看下面一个代码:
我们发现编译器报错,这是因为long类型范围更大,编译器无法自动转换,类比C语言,此时我们若想转换,需要自己进行显式类型转换(强制类型转换),如:
此时编译器不再报错,我们将long类型的a强制转成了int类型。需要注意,强制类型转换需要承受数据丢失的风险,当我们进行转换,便代表我们对丢失数据是认可的。
值得一提的是,布尔类型变量不能进行强制转换,很明显,true和3.14这种完全不同,自然无法进行转换。
4.类型提升
简单来说,不同类型数据之间相互运算时,数据类型小的会被提升为大的。下面我们看一个例子:
int c报错,而long d没有,这是因为在计算a+b时,a被提升为long类型进行计算,a+b的结果也自然也就是long类型,因此需要用long类型的d进行接收。
在实际计算中,程序会将小于四个字节的内容(short/byte)提升为int类型进行计算 。