一、Java的数据类型
Java是强类型语言,要求变量的使用要严格符合规定,所有变量必须先定义后使用。
弱类型语言:VB,JavaScript等 。
Java的数据类型分为两大类:
基本数据类型:
1、数值类型:整数类型:byte占1字节,范围 -27~~27-1
short占2字节,范围 -215~~215-1
int占4字节,范围 -231 ~~231-1
long占8字节,范围 -263~~263-1
2、浮点类型 float占4字节,double占8字节
3、字符类型 char占2字节
4、boolean类型编译时不谈占多少字节,在JVM分配空间时,占1个槽位(slot,等于4个字节),值只有true和false
拓展:在内存中,byte/short/char/boolean/int/float:占用1个slot,double/long占用2个slot
``
引用数据类型:类,接口,数组,枚举,注解,记录
String不是关键字,俗称字符串,是一个类,属于引用数据类型
String声明的字符串内部,可以包含0、1或多个字符
String与基本数据类型变量间的运算,只能作连接运算,使用“+”连接,运算的结果是String类型
String不能直接强制转换为基本数据类型
String —>int
int i = Integer.parseInt(str);
//整数
byte b = 111;
short s = 11111;
int i = 1;
long l = 12345L; //long类型在数字后加L
//int取值范围
System.out.println("int:"+Integer.MIN_VALUE+"~"+Integer.MAX_VALUE);
//浮点数
float f = 20.5F; //float类型在数字后加F
double d = 10.2;
//字符
char c = '中';
char c1 = 'a';
//字符串,String不是关键字,是一个类
String str = "abc";
//布尔类型
boolean flag = true;
// boolean flag = false;
System.out.println(str+flag); //abctrue
String str1 = i+d+str; //编译不通过
二、数据类型扩展
//数据类型扩展
// 进制 :二进制0b开头 八进制0开头 十六进制0x开头
int j= 11;
int j1 = 0b11; //3
int j2 = 011; //9
int j3 = 0x11; //17
System.out.println(j+" "+j1+" "+j2+" "+j3);
System.out.println("--------------------------");
// 浮点数扩展:银行业务表示钱? 使用BigDecimal 数学工具类
// float、double 有限,离散 有舍入误差 大约 接近但不等于
// 注:最好完全避免使用浮点数进行比较
float f1 = 100.1f;
double d1 = 100.1;
float f2 = 100.2f;
float f3 = 123124125515f;
float f4 = f3+1;
System.out.println(f1==d1); //false
System.out.println(f1+f2); //200.29999
System.out.println(f3==f4); //true
System.out.println("--------------------------");
//字符扩展 所有字符本质还是数字 Unicode编码 2字节
// 转义字符 \t制表符 \n换行
char a = 'a'; //97
char ch = '\u0023'; //#:35
char a1 = '好'; //22909
System.out.println((int)a); //强制类型转换
System.out.println((int)a1);
System.out.println(ch+":"+(int)ch);
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
System.out.println("--------------------------");
//字符串对象
String s1 = new String("Hello");
String s2 = new String("Hello");
String st1 = "Hello";
String st2 = "Hello";
System.out.println(s1==s2); //false
System.out.println(st1==st2); //true
System.out.println(s1==st1); //false
三、类型转换
类型转换 小数优先级高于整数
byte–>short,char–>int–>long–>float–>double
运算中,不同类型的数据先转换为同一类型进行运算
注:1、不能对布尔值进行转换
2、不能把对象类型转换为不相干的类型
3、高容量转换到低容量时,强制转换
4、转换的时候可能存在内存溢出,或者精度问题
//强制转换 (类型)变量名 高-->低
//自动转换 低-->高
int num = 128;
byte b1 = (byte) num; //内存溢出
double d2 = num;
System.out.println(num);
System.out.println(b1); //-128
System.out.println(d2); //128.0
// 注:1、不能对布尔值进行转换
// 2、不能把对象类型转换为不相干的类型
// 3、转换的时候可能存在内存溢出,或者精度问题
float ff = 12.34f;
double dd = -123.4;
System.out.println("ff:"+(int)ff+","+"dd:"+(int)dd);
char cc = 'a';
int k = 1;
System.out.println(cc+k+":"+(char)(cc+k)); //98
//操作大数注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years; //计算时溢出, -1474836480
long total1 = money*years; //默认为int,转换前已经存在问题
long total2 = money*(long)years; //先把一个数转换为long类型
System.out.println(total);
System.out.println(total1); // -1474836480
System.out.println(total2); //20000000000