学习笔记
/
四、数据类型
/
关于java中的数据类型:
1、数据类型的作用是什么?
程序当中有很多数据 ,每一个数据都是有相关类型的,不同数据类型的数据占用的的空间大小不同。
数据类型的作用是指导JVM在运行程序的时候给数据分配多大的内存空间
2、java中的数据类型包括两种:
基本数据类型
引用数据类型
*
*
*
3、基本数据类型包括四大类八小种:
第一类:整数型
byte 、short、int、long
第二类 :浮点型
float、double
第三类:布尔型
boolean
第四类:字符型
char
4、字符串“abc”不属于基本数据类型,属于引用数据类型,字符‘A’属于基本数据类型
字符串双引号 “abc”
字符单引号 ‘A’
5、八种基本数据类型各自占用空间大小是多少?
基本数据类型 占用空间大小【单位:字节】
--------------------------------------------------------------
byte 1
short 2
int 4
long 8
float 4
double 8
boolean 1
char 2
6、计算机在任何情况下都只能识别二进制。例如:只认识1010101010101010101...
【现代的计算机底层采用交流电的方式,接通和断开就两种状态,计算机只识别1或0】
7、进制
*数据的一种表示方式 。十进制表示满十进一原则,二进制表示满二进一原则。
例如:
十进制:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
二进制:
0 1 10 11 100 101 110 111 1000 10001...
0 1 2 3 4 5 6 7 8 9
8、字节(byte)
1 Byte = 8 bit 【 1个字节 =8个比特位】一个比特位表示一个二进制位:0/1
1 KB = 1024Byte
9、整数型当中的byte类型,占用 1个字节,所以byte类型的数据占用8个比特位,那么byte
类型的取值范围是什么?
*关于java中的数字类型,数字有正负之分,所以在数字的二进制当中有一个二进制位被称为“符号位”,
并且这个“符号位”在所有二进制的最左边。0表示正数,1表示负数。
byte类型最大值:01111111【
00000000 00000000 00000000 10000000(二进制)
减去1的结果:
00000000 00000000 00000000 01111111(二进制)
】 2的7次方-1结果是127
10、八种基本数据类型的取值范围:
类型 取值范围
--------------------------------------------
byte -128~127
short -32768~32767
int -2147483648~2147483647
long -9223372036854775808~9223372036854775807
float 有效位数6~7位
double 有效位数15位
boolean true/false
char 0~65535
/*
八种基本数据类型的默认值
数据类型 默认值
---------------------------------------------------------
byte、short、int、long 0
float、double 0.0
boolean false【在c语言中,true是1,false是0】
char \ u000
八种基本数据类型的默认值是一切向0看齐
public class DateTypeTest02{
//必须加static 成员变量
static int k=100;
//变量遵守:必须先声明、再赋值、才能访问。
// 成员变量没有赋值系统会默认赋值【局部变量不会】
static int f;//成员变量
public static void main(String[ ] args){
/*没有添加默认值。
int i;//局部变量
System.out.println(i);//错误
*/
System.out.println(k);//100
System.out.println(f);//0【默认值】
}
}
- /
*/
/*
关于java语言当中的整数
数据类型 占用空间大小 默认值 取值范围
------------------------------------------------------------------------------------------
byte 1 0 [-128~127]
short 2 0 [-32768~32767]
int 4 0 [-2147483648~2147483647]
long 8 0L
1、java语言当中的“整数型字面值”被默认当做int类型来处理。要让这个 “整数型字面值”被当做
long类型来处理的话,需要在“整数型字面值”后面加上l/L,建议使用大写的L。
2、java语言当中的整数型字面值有三种表达方式:
第一种: 十进制【是一种缺省值默认的方式】
第二种: 八进制【在编写八进制整数型字面值的时候需要以0开始】
第三种: 十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
public class DataTypeTest04{
int a =10;
int b =010;
int c =0x10;
System.out.println(a);//10
System.out.println(b);//8
System.out.println(c);//16
System.out.println(a+b+c);//34
//123这个整数型字面值是int类型
//i变量声明的时候也是int类型
//int类型的123赋值int类型的变量i,不存在类型转换
int i=123;
System.out.println(i);
//456整数型字面值被当做int类型,占用4个字节
//x变量在声明的时候是long类型,占用8个字节
//int类型的字面值456赋值给long类型的变量x,存在类型转换
//int 类型装换成long类型,int是小容量,long是大容量
//小容量可以自动转换成大容量,称为自动类型转换机制。
long x=456;
System.out.println(x);
//2147483647字面值是int类型,占用4个字节
//y是long类型,占用8个字节,自动转换。
long y= 2147483647;
System.out.println(y);
//编译错误,过大的整数;2147483648
//2147483648字面值是int类型,占用4个字节,但是超出了int类型的范围
long z =2147483648;
System.out.println(z);
//解决方案:
//2147483648当成long类型处理,在字面值后面添加L;
//2147483648L是8个字节的long类型,Z是long类型变量,以下程序不存在类型转换
long z =2147483648L;
System.out.println(z);
}
}
/*
public class DataTypeTest05{
public static void main(String [ ] args){
//100Ls是long类型字面值、x是long类型变量
//不存在类型转换,直接赋值
long x =100L;
//x变量是long类型,8个字节
//y变量是int类型,4个字节
//编译错误,大容量不能直接赋值给小容量
int y=x;
//大容量转换成小容量,需要进行强制类型转换
//强制类型转换需要加“强制类型转换符”
//加上强制类型装换符之后编译通过了,但是精度会损失
/* 强转原理
原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
强转之后的数据:00000000 00000000 00000000 01100100
将左边的二进制砍掉【所有的数据强转都是这样完成的】
*/
int y =(int) x;
System.out.println(y);
例外:三种特殊情况
byte b= 50;//编译成功
byte c =127;//编译成功
byte b1 =128; //编译不成功,超出范围
short s=32767;//编译成功
short s1=32768;//编译不成功,超出范围
char cc =65535;//编译成功
char c1 =65536;/编译不成功,超出范围
总结:当一个整数字面值没有超出byte、short、char的取值范围,这个字面值可以直接赋值给byte、short、char类型的变量
这种机制是通过SUN允许了,目的是为了方便程序员的编写。
*/
/*
关于浮点型数据类型:
float单精度 【4个字节】
double双精度【8个字节】
在java语言当中,所有的浮点型字面值,默认当做double类型处理,要想该字面值当做float类型来处理,需要在字面值后面添加F/f
注意:
double 和float在计算机内部二进制存储的时候存储的都是近似值。例如:10%3=3.3333..
public class DataTypeTest06
{
public static void main(String [ ] args) {
//3.0是double类型的字面值
//d是double类型的变量
//不存在类型转换
double d=3.0;
System.out.println(d);
//编译错误,大容量转换为小容量需要强制转换。
float f=5.1;
//解决方法
//第一种 强制类型转换
float f =(float) 5.1;
//第二种 没有类型转换
float f =5.1f;
*/
/*
在java语言中boolean类型只有两个值,true和false。
在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true底层是1.
布尔类型在实际开发中非常重要,经常使用在 逻辑运算和条件语句当中。
例子:
public class DataTypeTest07
{
public static void main(String [ ] args){
//编译报错:不兼容的类型
//boolean flag =1;
//boolean loginSuccess =false;
boolean loginSuccess =true;
//if条件控制语句
if(loginSuccess ){
System.out.println("恭喜登陆成功");
}else{
System.out.println("对不起,用户不存在或者密码错误");
}
*/
/*
关于基本数据类型之间的互相转换:
转换规则:
1、八种基本数据类型除了布尔类型外其余七种都可以互相转换。
2、小容量向大容量装换,称为自动类型转换,容量从小到大排序:
byte < short < int < long < loat < double
char <
注意:
任何浮点类型不管占用多少字节,都比整数型容量大。
char和short可以表示种类数量相同,但是char可以取更大的正整数
3、大容量转换成小容量,叫做强制转换。会损失精度。
4、当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量。
5、byte,short,char混合运算的时候,各自先转换成int类型再做运算。
6、多种数据类型混合运行,先转换成容量最大的那种类型再做运算。
*/