数据类型
(1)概括图
如图6-1-1:
<center>图6-1-1</center>
(2)基本数据类型(primitive data type)
a.总结
三大类,八小类,如图6-1-1。
b.数值型
1) 整数类型
计算机存储单位:
位 ,比特,bit,表示一位二进制数,一个0或1,简写为b,是存储数据的最小单位(数据传输大多以比特为单位)
字节,Byte,有8位组成,简写为B。字节是存储数据的基本单位,并且还是硬件所能访问的数据最小单位(因为硬件是通过地址总线访问内存的,而地址是以字节为单位分配的,所以地址总线只能精确到字节。那如何控制到字节的某一位,就要通过“位运算符”,即通过软件的方式来控制)。
1 KB(Kilobyte,千字节)=1024 B
1 MB(Megabyte,兆字节)=1024 KB
1 GB(Gigabyte,吉字节,千兆)=1024 MB
1 TB(Trillionbyte,万亿字节,太字节)=1024 GB
1 PB( Petabyte,千万亿字节,拍字节) = 1024 TB
1 EB( Exabyte,百亿亿字节,艾字节) = 1024 PB
1 ZB (Zettabyte,十万亿亿字节,泽字节) = 1024 EB
1 YB ( Yottabyte,一亿亿亿字节,尧字节) = 1024 ZB
1 BB ( Brontobyte,千亿亿亿字节)=1024 YB
字与字长的概念:
字:在计算机中,一串数码作为一个整体来处理或运算的,称为一个计算机字,简称字。字通常分为若干个字节(每个字节一般是8位)。在存储器中,通常每个单元存储一个字。因此每个字都是可以寻址的。字的长度用位数来表示 。
字长:计算机的每个字所包含的位数称为字长,计算的字长是指它一次可处理的二进制数字的数目。一般地,大型计算机的字长为32-64位,小型计算机为12-32位,而微型计算机为4-16位。字长是衡量计算机性能的一个重要因素 。
整型用于表示没有小数部分的数值,允许为负数。整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。
<center>图6-2-1</center>
整型常量的4种表现形式:
十进制整数,如:100,-100,0
八进制整数,要求以0开头,如:015
十六进制数,要求0x或0X开头,如:0x15
二进制数,要求0b或0B开头,如:0b01110011
Java语言的整型常数默认为int 型,声明long型常量可以后加'l'或‘L’。
2) 浮点数类型
带小数的数据在java中称为浮点型。浮点型数据可分为float类型和double类型。float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。而double表示这种类型的数值约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都是采用double类型。浮点型常量默认类型也是double。
<center>图6-2-2</center>
java浮点类型常量有两种表示形式
十进制数形式,例如:3.14 314.0 0.314
科学记数法形式,如:314e2 314E2 314E-2
示例
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);//结果为false
示例
float d1 = 423432423f;
float d2 = d1+1;
if(d1==d2){
System.out.println("d1==d2");//输出结果为d1==d2
}else{
System.out.println("d1!=d2");
}
示例:
float f = 3.14F;
double d1 = 3.14;
double d2 = 3.14D;
示例
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd);//0.5
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);//0.5000000000000001
}
}
示例:
char a = 'T';
char b = '尚';
char c = '\u0061';
System.out.println(c);
//转义字符
System.out.println(""+'a'+'\n'+'b');
System.out.println(""+'a'+'\t'+'b');
System.out.println(""+'a'+'\''+'b'); //a'b
//String就是字符序列,以后细说
String d = "abc";
示例:
boolean flag ;
flag = true; //或者flag=false;
if(flag) {
// true分支
} else {
// false分支
}
请不要这样写:if ( flag == true ),只有新手才那么写。关键也很容易写错成if(flag=true),这样就变成赋值flag 为true而不是判断!
讲对象时补充
示例
short b = 12; //合法short b = 1234567;//非法,1234567超出了short的表数范围
语法格式:
(type)var
示例:
double x = 3.14;
int nx = (int)x; //值为3char c = 'a';
int d = c+1;
System.out.println(nx);
System.out.println(d);
System.out.println((char)d);
示例:
int x = 300;
byte bx = (byte)x; //值为44
示例:
int money = 1000000000; //10亿int years = 20;
//返回的total是负数,超过了int的范围int total = money*years;
System.out.println("total="+total);
//返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生了数据丢失long total1 = money*years;
System.out.println("total1="+total1);
//返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。long total2 = money*((long)years);
System.out.println("total2="+total2);
int l = 2; //分不清是L还是1,
long a = 23451l;//建议使用大写L
System.out.println(l+1);
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。