java基础学习笔记(三)—— 数据类型

java基础学习笔记(三)—— 数据类型

It comes down to a simple choice: Keep busy living or get busy dying.

| @Author:TTODS



基本数据类型

整数类型
整数类型 宽度 取值范围
byte 1个字节(8位) -128~127
short 2个字节(16位) -215~215-1
int 4个字节 (32位) -231~231-1
long 8个字节(64位) -263~263-1
public class TypeOfData{
	public static void main(String[] args) {
		System.out.println("默认的整数类型是int类型:"+16);
		byte byteNum = 16;
		short shortNum = 16;
		int intNum  = 16;
		long longNum = 16L;	//此处可为小写的l但是一般写大写的L,因为大写的L更容易与数字1区分
		System.out.println("byteNum="+byteNum);
		System.out.println("shortNum="+shortNum);
		System.out.println("intNum="+intNum);
		System.out.println("longNum="+longNum);
	}
}

输出:

默认的整数类型是int类型:16
byteNum=16
shortNum=16
intNum=16
longNum=16
浮点类型
浮点类型 宽度
float 4个字节(32位)
double 8字节(64位)
public class TypeOfData{
	public static void main(String[] args) {
		System.out.println("java 默认的浮点类型的数据是double类型:"+0.0);
		float floatNum = 0.0f;
		double doubleNum = 0.0d;
		System.out.println("floatNum="+floatNum);
		System.out.println("doubleNum="+doubleNum);
	}
}

输出:

java 默认的浮点类型的数据是double类型:0.0
floatNum=0.0
doubleNum=0.0
数字类型的表示方法

除了上面的表示方法,常用来表示数字的方法还有进制表示法,和指数表示法

public class TypeOfData{
	public static void main(String[] args) {
		System.out.println("---数字的不同进制表示---");
		int decimalInt = 255;
		int binaryInt =  0b11111111;//0B11111111
		int octalInt = 0377;
		int hexdecimalInt = 0xFF; //0XFF
		System.out.println("decimalInt="+decimalInt);
		System.out.println("binaryInt="+binaryInt);
		System.out.println("octalInt="+octalInt);
		System.out.println("hexdeximalInt="+hexdecimalInt);
		System.out.println("---数字的指数表示法---");
		double num1 = 2.0e4;//2.0E4
		double num2 = 9.93e-2;//9.93E-2
		System.out.println("num1="+num1);
		System.out.println("num2="+num2);
		}
}

输出:

---数字的不同进制表示---
decimalInt=255
binaryInt=255
octalInt=255
hexdeximalInt=255
---数字的指数表示法---
num1=20000.0
num2=0.0993
字符类型
字符类型 宽度
char 2个字节(16位)

字符类型表示单个字符,java中用char声明字符类型,声明方法如下:

char ch = 'A';//注意只能使用英文的单引号

因为java采用双字节的Unicode编码,所以char类型占两个字节。

	public class TypeOfData{
	public static void main(String[] args) {
		char ch ='T';
		char ch1 = '\u0054'; //Unicode编码
		char ch2 = '龙'; //Unicode编码可支持亚洲文字(中、日、韩文等)
		System.out.println("ch="+ch);
		System.out.println("ch1="+ch1);
		System.out.println("ch2="+ch2);
		
		}
}

字符类型也属于字符类型,可于其他的字符类型进行计算,用于计算的值就是Unicode编码的值,取值范围是0X0000~0XFFFF(0~216-1);

public class TypeOfData{
	public static void main(String[] args) {
		char ch ='T'; //'T'的Unicode编码位\u0054,0X0054=84
		int num = 'T'*2;
		System.out.println("num="+num);
		}
}

输出:

num=168
转义字符
字符表示 Unicode编码 说明
\t \u0009 水平制表符tab
\n \u000a 换行
\r \u000d 回车
" \u0022 双引号
\u0027 单引号
\ \u005c 反斜线
布尔类型

在Java中声明布尔类型的关键字是boolean,它只有两个值 :true和false;
在C语言中布尔类型是数值类型,取值为0和1;而java中boolean类型不是数值类型不能用1和0表示,也不能于其他数值类型进行运算。

数值类型的相互转换

自动类型转换

自动类型转换不仅发生在赋值过程中,在进行数学计算时也会发生自动类型转换,在运算中往往是先将数据类型转换为同一类型,然后再进行运算,规则如下:

操作数1 类型 操作数2 类型 转换后类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double
强制类型转换

有时除了自动类型转换,我们还需要用到强制类型转换,强制类型转换是在变量或常量之前加上"(目标类型)"实现。
例如:

		byte byteNum = 100;
		byte sum = byteNum +1;

这段代码是无法运行的,原因是java的默认整数类型是int类型,就是说第二句代码中的1为int类型,计算时,byteNum被自动转换为了int类型,所以它们的和为int类型,而代码中的sum为byte类型,java无法从int类型自动转换为byte类型所以报错。这是就要用强制类型转换。解决方法如下:

		byte byteNum = 2;
		byte sum =(byte)(byteNum + 1);
		System.out.println(sum);

输出

3

值得注意的是当大宽度数值转换为小宽度数值时,大宽度数值的高位被截掉,这样会导致数据的精度丢失(如下例)。除非大宽度数值的高位没有数据,就是这个数比较小的情况(上面代码就是这种情况)。

		byte byteNum = 127;
		byte byteSum = (byte)(byteNum+1);
		System.out.println(byteSum);

输出

-128;

解释如下:

上面计算的二进制形式如下(int类型)
	00000000 00000000 00000000 01111111
+	00000000 00000000 00000000 00000001
-------------------------------------------
	00000000 00000000 00000000 10000000
得到的结果是0b00000000000000000000000010000000,int类型,转化为10进制是128;
然后进行强制类型转换,截取int类型的最后8位,为0b10000000,但是又因为java中所
有的数值类型都是有符号类型,byte的第一位为符号位,因此得出的值为-128,计算机
内的二进制存取和运算不是一两句话能说清的。

引用数据类型(待完善)

在java中除了8中基本数据类型外,其他数据类型都是引用(reference)数据类型,引用数据类型用来表示复杂数据类型,即包含类、接口和数组声明的数据类型。java中的引用数据类型相当于C等语言的指针(pointer)类型,引用事实上就是指针,是指向一个对象的内存地址。

问题:

问题一:

为什么long 类型,float和double的数据要分别在后面加上字母"L",“f"和"d”?

问题二:

为什么数值的指数表示法是double类型?

- THE END -
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章