Java的数据类型 基本类型强类型语言
一种强制类型定义的语言,它要求变量或常量必须声明类型,并且只有在声明后才能使用。一经声明,该变量就只能存储这种数据类型的值。而且在赋值和运算过程中,参与该过程的数据类型必须一致。需要注意的是,强类型语言有个强制转换,这改变的是变量的值的类型,以便进行赋值,而没有改变变量的类型。变量的类型是不允许改变的。
强类型语言包括Java、.net 、Python、C++等。
弱类型语言一种弱类型定义的语言,即数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。变量可以根据环境变化自行转换类型,不需要经过显式转换。弱类型语言包括vb 、PHP、javascript等。
区别两种类型语言的根本区别在于,变量类型是否会自行随需转换。强类型的变量一经声明,就只能存储这种类型的值,其他类型的值则必须通过转换之后才能赋给该变量,有编译器自动理解的转换,也有由程序员明确指定的强制转换。但是,弱类型的变量类型则是随着需要不断转换。弱类型语言在速度上更胜一筹,而强类型定义语言的严谨性又能避免不必要的错误。
数值类型
整数类型
byte 占1个字节范围: -128~127short 占2个字节范围:-32768~-32767int 占4个字节范围:-2147483648~2147483647long 占8个字节范围:-9223372036854775808~9223372036854775807
浮点类型
float 占4个字节double 占8个字节
字符类型
char 占2个字节 boolean类型
true 占1个字节false 占1个字节
位(bit):计算机内部数据储存的最小单位。例如11001100,是八位二进制数。字节(byte):计算机数据处理的基本单位。习惯用B表示。字符:指计算机中使用的数字、字母、字和符号。1bit表示1位(1b)1Byte表示一个字节(1B)1B=8b1KB=1024B1M=1024KB(M读作兆)1G=1024M1TB=1024G
引用类型
类接口数组 拓展 整数拓展:进制
二进制 0b八进制 0十进制十六进制 0x (0~9 A~F) 16
int i1 = 0b10; //二进制 int i2 = 010; //八进制 int i3 = 10; //十进制 int i4 = 0x10; //十六进制 System.out.println(i1); //2 System.out.println(i2); //8 System.out.println(i3); //10 System.out.println(i4); //16浮点数拓展
float 有限 离散 舍入误差 大约 接近但不等于double
float f = 0.1f; //0.1 double d =1.0/10; //0.1 System.out.println(f==d);//false float d1 = 2313216542313165f; float d2 = d1 + 1; System.out.println(d1==d2);//true
最好完全使用浮点数进行比较!!!
最好完全使用浮点数进行比较!!!
最好完全使用浮点数进行比较!!!
char c1 = 'a'; char c2 = '中'; System.out.println(c1);//a System.out.println(c2);//中 System.out.println((int)c1);//强制转换为int类型 值为97 System.out.println((int)c2);//强制转换为int类型 值为20013
所有的字符本质还是数字
编码 Unicode表: 每个字符占2字节 包括0 - 65536 用十六进制表示
例如:U0061 转为数字是 97 表示’a’
char c3 = 'u0061'; System.out.print(c3); //a转义字符
u 转义字符 u + 四个十六进制数字;0~65535 u0000:空字符t 制表符n 换行’ 单引号字符" 双引号字符 反斜杠字符r 回车b 退格
String sa = new String("Hello world");
String sb = new String("Hello world");
System.out.println(sa==sb);//false
String sc = "Hello world";
String sd = "Hello world";
System.out.println(sc==sd);//true
String是对象类型,不能仅仅用"=="来比较相等,应该使用equals()比较的是对象的内容
布尔值拓展 boolean flag = true;
if (flag==true){}
if (flag){}
//两种写法都可以正常使用,一般推荐使用第二种,代码精简易读
类型转换
由于Java是强类型语言,所有要进行有些运算的时候,需要用的类型转换。
运算中,不同类型的数据先转换成同一类型,然后进行运算
int i = 128; byte b = (byte)i;//强制类型转换 System.out.plintln(i);//128 System.out.println(b);//-128 byte的最大值是127,128大于127导致内存溢出
强制类型转换 (类型)变量名 高–>低自动类型转换 低–>高不能对布尔值进行转换不能把对象类型转换为不相干的类型在把高容量类型转换到低容量类型的时候,强制转换可能存在内存溢出,或者精度问题
System.out.println((int)23.7); //23 System.out.println((int)-45.69f); //-45 char c = 'a'; int i = c+1; System.out.println(i);//98 System.out.println((char)i);//b
操作比较大的数的时候,注意溢出问题
JDK7新特性,数字之间可以使用下划线分割
int money = 10_0000_0000; System.out.println(money);//1000000000 int years = 20; int total = money*years;//-1474836480 System.out.println(total); long total2 = money*years;//默认是int,计算的时候溢出了 System.out.println(total2);//-1474836480 long total3 = money*((long)years);//先将一个数转为long类型 System.out.println(total3);//20000000000



