数据类型
-
强类型语言
-
要求变量的使用严格符合规定,所有变量都必须先定义后使用
-
-
弱类型语言
-
没有严格的规定
-
-
Java的数据类型分为两大类
-
基本类型
-
引用类型
-
基本数据类型
public class Demo01 {
//八大基本数据类型
//整数
int num1 = 10; //最常用
byte num2 = 20;
short num3 = 30;
long num4 = 40L; //Long类型要在数字后面加L
//小数:浮点数
float num5 = 50.1F;
double num6 = 3.116927;
//字符
char num7 = '中';//代表一个字
//字符串,String不是关键字,是类
String name = "汉青";
//布尔值:true和false
boolean flag = true;
}
整数和浮点数拓展
public class Demo03 {
public static void main(String[] args) {
//整数拓展: 进制 --> 二进制0b 八进制0 十进制 十六进制0x
int i = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x 0~9 A~F
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("====================================================");
//================================================================
//浮点数拓展:银行业务怎么表示 使用BigDecimal
//================================================================
//float 有限 离散 舍入误差 大约 接近但不等于
float f = 0.1f;//0.1
//double 最好完全避免使用浮点数进行比较
double d = 1.0/10;//0.1
System.out.println(f==d);//false
float f1 = 2113133131f;
float f2 = f1 + 1;
System.out.println(f1 == f2);//true
}
}
字符拓展
public class Demo04 {
public static void main(String[] args) {
//字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//强制转换
System.out.println(c2);
System.out.println((int)c2);//强制转换
//所有的字符本质上还是数字
//编码 Unicode
//U0000 UFFFF
char c3 = '\u0061';
System.out.println(c3);//a
//转义字符
//\t 制表符 \n 换行
}
}
布尔值拓展
public class Demo05 {
public static void main(String[] args) {
//通过内存分析
String sa = new String("Hello world");
String sb = new String("Hello world");
System.out.println(sa == sb);//false
String a = "Hello world";
String b = "Hello world";
System.out.println(a == b);//true
//布尔值拓展
//less is more java要精简易懂
boolean flag = true;
if (flag){} //if(flag == true){}
}
}
数据类型转换
强制转换
将精度高的转换为精度低的
注意:会出现精度丢失的情况
自动转换
当出现精度低的要转换成精度高的时候,无需手动操作,java虚拟机会自动执行
不会出现精度丢失
public class Demo06 {
public static void main(String[] args){
//强制转换 (类型)变量名 高--->低
int i = 128;
byte b = (byte)i;
System.out.println(i);
System.out.println(b); // -128 内存溢出
//自动转换 (类型)变量名 低--->高
/*
注意点:
1. 不能对布尔值进行转换
2. 不能把对象转换为不相干的类型
3. 在把高容量转到低容量的时候,强制转换
4. 转换的时候可能存在内存溢出,或精度问题
*/
System.out.println((int)23.5);//23
System.out.println((int)-45.38f);//-45
}
}
public class Demo07 {
public static void main(String[] args) {
//操作比较大的数字的时候,注意溢出问题
//JDK7新特性,数字之间可以使用下划线来分割
int money = 10_0000_0000;
int year = 20;
int total = money * year; //-1474836480 计算的时候就出现精度溢出的问题
long total2 = money * year; //-1474836480 默认的是int,转换的时候已经存在问题
long total3 = (long)money * year;//需要先把一个数转换为long类型
System.out.println(total3);//20000000000
}
}