基本数据类型

Java数据类型基础知识

Java有两种数据类型:基本数据类型引用类型

引用类型是一组基本类型的组合,如数组、类和接口。

数组类型本身不存值,存的是指向实际数据的内存地址。

null类型,没有名字,也不能声明null类型的变量。

Java有8个基本类型:6个是数值类型(4个整数类型和2个浮点数类型),1个字符类型(char)用来表示Unicode编码字符,1个布尔类型(boolean)表示逻辑真true和逻辑假false。

  • Java的8个基本数据类型
类型 说明 初始值 byte 8位带符号整数,可表示的数的范围为-128~127 (byte)0 short 16位带符号整数,可表示的数的范围为-32768~32767 (short)0 int 32位带符号的整数,可表示的数的范围为-2147483648~2147483647 0 long 64位带符号的整数,可表示的数的范围为-9223372036854775808~9223372036854775807 0L float 32位单精度浮点数,使用IEEE754-1985标准 0.0f double 64位单精度浮点数,使用IEEE754-1985标准 0.0d boolean 只有两个值:真(true)和假(false) false char 16位字符,其ASCII码的最高位为0,它所表示的数字是无符号16位值,0~65535 '\n0000'
  • 1、整数类型

整数类型的表现方式有八进制、十进制、十六进制。八进制常数通常用来进行位操作。

八进制数如0467、0324等。

十进制数如45、769、1236等。

十六进制数如0x23f、0x45a、0x45、0xff41等。

八进制数值前加0,十进制和一般写法一样,十六进制数值前面加0x或0X.。

  • 2、浮点类型

浮点类型用来表示一个带小数的十进制数。组成部分:十进制整数、小数点、十进制小数、指数和正负符号。

浮点数可用标准形式表示,可用科学计数法形式表示。如:3.14159,1.1,6.22436,3.766E8等。

用科学计数法的形式表示浮点数时,指数必须是整数形式。

Java有两种浮点数形式:即单精度浮点数和双精度浮点数。

单精度浮点数的存储空间为32位,也就是4个字节;双精度浮点数的存储空间为64位。

Java通过在浮点数后面加描述符的方法来指明这两种浮点数。

如:单精度浮点数:1.5或1.5f或1.5F。双精度浮点数:1.5d或1.5D。

后面没有特别指明后缀,则为双精度浮点数。

3、布尔类型

布尔类型只有两种值:真和假,通常用关键字true和false来表示。

Java的布尔类型只能是真或假,不能代表整数(0或1)。

改变不二变量可以直接赋值,可以利用其他变量间接赋值,还可以使用等式赋值,如:myBoolean = 2>1。

4、字符类型

字符型数据是由一对单引号括起来的单个字符,如:'a'。

Java使用的是16位的Unicode字符集。

还有一类字符有特殊的意义,被成为“转义字符”(escape characters),引用方法为“\”加上特定的字符序列。

Java的转义字符
转义序列含义转义序列含义
\n回车\'单引号
\t水平制表符\"双引号
\b空格\\反斜杠
\r换行\dddddd为3位八进制数,值在0000~0377之间
\f换页\dddddddd为4位十六进制数

字符串是用一对双引号括起来的字符序列,是由String关键字所定义的。

char类型可以进行类似于整数的运算操作,如可以将两个字符相加,或对一个字符变量值进行增量操作。

public class test1 {
	public static void main(String[] args) {
		char ch1;
		ch1 = 'X';
		System.out.println(ch1);
		ch1 = (char) (ch1+1);
		System.out.println(ch1);
	}
}

5、各类型数据间的相互转换:

整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,再进行运算。

按优先关系,转换分为两种:自动类型转换强制类型转换

①自动类型转换

按照优先关系,低级数据要转换成高级数据时,进行自动类型转换。

低级数据向高级数据的自动转换规则
操作数1类型操作数2类型转换后的类型
byte或shortintint
byte或short或intlonglong
byte或short或int或longfloatfloat
byte或short或int或long或floatdoubledouble
charintint

上表操作数1类型和操作数2类型代表参加运算的两个操作数的类型,转换后的类型代表其中一个操作数自动转换后与另一个操作数达成一致的类型。

public class test {
	public static void main(String[] args) {
		char c ='h';
		byte b = 5;
		int i = 65;
		long a = 465L;
		float f = 5.65f;
		double d = 3.234;
		int ii = c + i;			//char类型的变量c自动转换为与i一致的int类型参加运算
		long aa = a - ii;		//int类型的变量ii自动转换与a一致的long类型参加运算
		float ff = b * f;		//byte类型的变量b自动转换为与f一致的float类型参加运算
		double dd = ff/ii + d;
		System.out.println("ii = " + ii);
		//int类型的变量ii自动转换为与ff一致的float类型
		//ff/ii计算结果为float类型,然后再转换为与d一致的double类型
		System.out.println("aa = " + aa);
		System.out.println("ff = " + ff);
		System.out.println("dd = " + dd);
	}
}

②不兼容强制转换

当进行类型转换时要注意使目标类型能够容纳原类型的所有信息,允许的转换包括:

byte→short→int→long→float→double,以及char→int

把位于左边的一种类型的变量赋给位于右边的类型的变量不会丢失信息。当执行一个这里并未列出的类型转换时可能并不总会丢失信息,但进行一个理论上并不安全的转换总是很危险的。

强制类型转换是一种显示的类型变换,通用格式为:

(target_type) value

target_type指的是要转换成什么类型,如:

int a;

byte b;

b = (byte) a;        //把int型变量a强制转换为byte型

上面为int型强制转成byte型,如果int型变量的值超出了byte型变量的取值范围(-128~127),它的值将会因为对byte型值域(byte值域为256)取模(整数除以byte得到的余数)而减少。

把浮点值赋值给整型类型时,它的小数部分会被舍去。

public class test2 {
	public static void main(String[] args) {
		byte b;
		int i = 257;
		double d = 323.142;
		b = (byte) i;
		System.out.println("i:" +i + ",b:" + b);
		i = (int) d;
		System.out.println("d:" + d + ",i:" + i);
		b = (byte) d;
		System.out.println("d:" + d + ",b:" + b);
	}
}

运行结果:

i:257,b:1
d:323.142,i:323
d:323.142,b:67
上面整型的值257被强制转换为byte变量时,结果257除以256(256是byte类型的变化范围)的余数1。变量d转成int型,小数部分被舍弃了。变量d转换为byte型,小数部分被舍弃,值减少为256的模,即67.

 

附一张ASCII表,方便参考

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值