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

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

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

| @Author:TTODS



基本数据类型
整数类型
整数类型宽度取值范围
byte1个字节(8位)-128~127
short2个字节(16位)-215~215-1
int4个字节 (32位)-231~231-1
long8个字节(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
浮点类型
浮点类型宽度
float4个字节(32位)
double8字节(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
字符类型
字符类型宽度
char2个字节(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、charintint
byte、short、char、intlonglong
byte、short、char、int、longfloatfloat
byte、short、char、int、long、floatdoubledouble
强制类型转换

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

		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”?
L:由于java的默认整数类型是int,如果不加L说明该数为int类型,因为int类型可以自动转换为long类型,所以当该值不超过int类型的范围时可以不写L;当该数值超过int类型的范围时,必须写L;

long num1 = 300000000; //不会报错
long num2 = 3000000000;//报错 3000000000超出了int范围
long num3 = 3000000000L;//不会报错

f/F:由于java的默认浮点类型是double类型,而从double类型无法自动转换为double类型,所以当float的值为小数时,类型数据声明时一定要加上f/F.
特殊情况:当float的值为整数时,可以不加f/F,原因是int类型可以自动转换成float类型。

float num2 = 1;		//不报错 int 类型可以自动转换成float类型
float num1 = 1.1; //报错 double 类型不能自动转换成float类型
float num3 = 2.2f;
float num4 = 2.2F;

d/D:由于java默认的浮点类型是double类型,所以d/D可加可不加

double num = 0.0;
double num1 = 0.0d;
double num2 = 0.0D;
问题二:

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

- THE END -
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值