基础数据类型详解
1 基础数据类型分类
各种基础数据类型所占字节数的大小(单位Byte)
整数型数据 byte 1 short 2 int 4 long 8
小数型数据 float 4 double 8
字符型数据 char 2
布尔型数据 boolean 1
1.1 整数型数据类型
数据类型所占空间的大小:
byte --- 字节型数据类型,在内存中占用1个Byte,所能表示的范围是多少?-128~127
short--- ..... 在内存中占用2个Byte,所能表示的范围是多少?-32768 ~ 32767
int ---- 整型 在内存中占用4Byte,所能表示的范围是多少?-2147483648 ~ 2147483647
long --- 长整型 在内存中占用8Byte
在java中,定义整数型数据的时候,如果字面量是十进制的数值,那么java会自动默认为int型。
也就是说:int short byte long 这几个,只要后面跟的是十进制的整数,那么它们都被默认为int型
Test01.java:12: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte b = -129;
为什么有损失?怎么损失的?
class Test01
{
public static void main(String[] args)
{
byte b = (byte)300;
System.out.println(b);
byte m = -1;
System.out.println(m);
}
}

1.2 关于计算机内存中存储的二进制
记住,在计算机内存存储的二进制都是以补码的形式进行存储,在内存中第一位表示符号位,0表示正,1表示负
什么是补码?
对于一个正数来说,它的原码、反码、补码都一个样
如:10的原码:00000000 00000000 00000000 00001010
对于一个负数来说,它的原码、反码、补码是什么样子的、
原码很简单,就是一个整数的二进制表示,第一位是符号位
如:-1的原码:10000000 00000000 00000000 00000001
反码:符号位不变,其他位取反也就是说,原来是0的要变成1,是1的要变成0,记住符号位不变
-1的反码:11111111 11111111 11111111 11111110
补码:反码+1
-1的补码:11111111 11111111 11111111 11111111
1.3 long和int的区别
class Test01
{
public static void main(String[] args)
{
long l = 2147483648L;
System.out.println(l);
}
}
1.4 float 和 double
class Test01
{
public static void main(String[] args)
{
float pi = 3.14;
double pi2 = 3.1415926;
System.out.println(pi);
System.out.println(pi2);
}
}
编译器报错:
E:\java基础\1-20-2>javac Test01.java
Test01.java:5: 错误: 不兼容的类型: 从double转换到float可能会有损失
float pi = 3.14;
^
1 个错误
class Test01
{
public static void main(String[] args)
{
float pi = 3;
double pi2 = 3.1415926;
System.out.println(pi);
System.out.println(pi2);
}
}
编译通过。
E:\java基础\1-20-2>javac Test01.java
E:\java基础\1-20-2>java Test01
3.0
3.1415926
为什么?
1. 只要是字面量为小数,系统默认为double型的,double占了8个字节,float只占了4个字节
2. 如果给的字面量是整数,它就编译通过了呢?因为int是4字节,float也是4字节的,所以能通过。
3. 补充,float比long所表示的范围要大。这个东西希望你们记住就可以了,float占4个字节,long占8个字节,但是float要比long大。
4. 定义float类型的变量,其后的字面量为小数一定要带F
1.5 char
class Test01
{
public static void main(String[] args)
{
double pi2 = 3.1415926;
char c = 'a';
int cc = 'a';
char ch = 98;
char ch1 = 32767;
char ch2 = -32767;
System.out.println(ch2);
System.out.println(pi2);
}
}
class Test01
{
public static void main(String[] args)
{
char c = 'a';
int cc = c;
System.out.println(c);
System.out.println(cc);
}
}
class Test01
{
public static void main(String[] args)
{
int c = 'a';
char cc = c;
System.out.println(c);
System.out.println(cc);
}
}
编译会报错:
E:\java基础\1-20-2>javac Test01.java
Test01.java:6: 错误: 不兼容的类型: 从int转换到char可能会有损失
char cc = c;
^
1 个错误
结论:在基础数据类型中,如果大转小,不强制类型转换,编译是通不过的。
class Test01
{
int i = 10;
int i;
int j = 10;
i = j;
public static void main(String[] args)
{
int c = 'a';
char cc = c;
System.out.println(c);
System.out.println(cc);
short i = 10;
int j = 10;
short i = j;
}
}
1.6 boolean
class Test01
{
public static void main(String[] args)
{
boolean flag = true;
int j = (int)flag;
System.out.println(j);
}
}
boolean flag = true;
int j = (int)flag;
System.out.println(j);
}
}