整数型:
byte,字节型,占1个字节,8位,-128~127
short ,短整形,占2个字节,16位,-2^15~2^15-1 -32768~32767
int,整形,占4个字节,32位,-2^31~2^31-1,-2147483648~21474648
long,长整型,占8个字节,64位,-2^63~2^63-1,以L结尾(小写的l也可以,但L方便区分l和1)
浮点型:
float,浮点型,单精度,占4个字节,32位,-3.103E38~3.403E38,直接赋值时必须在数字后加上f或F
double,浮点型,双精度,占8个字节,64位, -1.798E308~1.798E308,赋值时可以加d或D也可以不加
字符型:
char 字符型,占2个字节,16位,0-65535,存储Unicode码,用单引号赋值
布尔型
boolean,占1/8个字节,1位,只有false和true两个取值
默认值
byte,short,int,long 默认值0
float,double 默认值0.0
char 默认值\u0000
boolean 默认值false
引用数据类型 默认值null
注意:float、double两种类型的最小值与Float.MIN_VALUE、 Double.MIN_VALUE的值并不相同,实际上Float.MIN_VALUE和Double.MIN_VALUE分别指的是 float和double类型所能表示的最小正数。也就是说存在这样一种情况,0到±Float.MIN_VALUE之间的值float类型无法表示,0 到±Double.MIN_VALUE之间的值double类型无法表示。这并没有什么好奇怪的,因为这些范围内的数值超出了它们的精度范围。
Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。
Java基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。从Java5.0(1.5)开始,JAVA虚拟机(JavaVirtual Machine)可以完成基本类型和它们对应包装类之间的自动转换。因此我们在赋值、参数传递以及数学运算的时候像使用基本类型一样使用它们的包装类,但这并不意味着你可以通过基本类型调用它们的包装类才具有的方法。另外,所有基本类型(包括void)的包装类都使用了final修饰,因此我们无法继承它们扩展新的类,也无法重写它们的任何方法。
数据类型的转换
为什么长整形型直接赋值时,要加L?
直接赋值时,java将所赋的值自动看成int型,如果long类型的变量赋的值大于int的范围,计算机会报错,所以加上L后就可以认识是长整型。
为什么float类型直接赋值时,要加f或者F?
float类型的数,java将其看成double类型的值,double类型的存储长度比float大,可能会损失精度,就会报错。如下:
public class vartest{
public static void main(String[] args) {
float f1=1.0;//此行报错,不能从double转换位float
float f2=1.0f;//正确
float f3=(float)1.0 //强制类型转换
double d1=1.23;
float f4=(float)d1;//强制类型转换
}
}
另外,float放在内存中其实是当作double来处理的,它不会比double更节约内存资源,对应的double虚拟机会直接以double形式来进行处理,快速而且精度高,但是如果用float,不但不会节约内存资源,虚拟机为了校验float的精度,会花费更多的系统资源,例如cpu时钟,程序执行步骤等等
自动类型转换:
范围小的转换为范围大的,
public class vartest{
public static void main(String []args){
long l1=120;//120属于int类型值,可以直接转换位范围大的long类型值
}
}
容量大的转换为容量小的,强制类型转换
public class vartest{
public static void main(String []args){
long l1=1000;
int i1=(int)l1; //容量大的转换位容量小的,需要强制类型转换,但可能会损失精度
byte b1=125; //给byte类型赋值时,需要注意取值范围,只要不超过byte类型的取值范围就可以
byte b2=128;//此行错误,超过byte的取值范围了
short s1=32767;//只要所赋的字面值不超过short的取值范围就可以
short s2=40000;//此行错误
}
}
char
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,叫做ASCII编码。
public class vartest{
public static void main(String[] args) {
char c1='a';
// char='abcd';//错误,char只能赋值成单个字符
char c2='你';
//汉字占两个字节,所以char类型可以存储一个汉字
//可以赋予响应的ASCII值
char c4=65;
char c5=97;
char c6=48;
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
}
}
转义字符
字母前面加上捺斜线"\"来表示常见的那些不能显示的ASCII字符.称为转义字符.如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
把一个特殊字符赋值给char类型应该使用转义字符,斜线在java语言中有转义功能,例如:char c1 = '\'';
public class vartest{
public static void main(String[] args) {
char c1='a';
char c2='b';
char c3='\n';
char c4='c';
System.out.print(c1);
System.out.print(c2);
System.out.print(c3);
System.out.print(c4);
char c5='\t';
System.out.println();
System.out.print(c1);
System.out.print(c2);
System.out.print(c5);
System.out.print(c4);
}
}
结果:
ab
c
ab c
参考:http://blog.csdn.net/qq_35101189/article/details/54021473
http://www.monkey1024.com/javase/111