一、数据类型
-
强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。(比较严谨,安全性更高,速度比较慢)
-
弱类型语言
-
Java的数据类型分为两大类
-
基本类型:四类八种
-
整数类型:byte、short、int、long
-
浮点数类型:float、double
-
字符类型:char
-
布尔类型:boolean
-
-
引用类型
-
//八大基本数据类型 //整数 int num1 = 10; //最常用 byte num2 = 20; short num3 = 30; long num4 = 30L; //Long类型要在数字后面加个L //小数:浮点数 float num5 = 50.1F; double num6 = 3.1415926; //字符 char name = 'A'; //布尔 boolean b = true;
二、什么是字节
-
位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数。
-
字节(byte):是计算机中数据处理的基本单位,习惯上用大B来表示。
-
1B(byte字节)=8bit
-
字符:是指计算机中使用的字母、数字、字和符号
-
1bit表示1位
-
1Byte表示一个字节1B=8b。
-
1024B=1KB
-
1024KB=1M
-
1024M=1G
三、拓展
-
整数拓展进制:
-
二进制:0b 逢二进一
-
十进制:逢十进一
-
八进制:0 逢八进一
-
十六进制:0x 逢十六进一
-
int i = 10; int i2 = 010; //八进制0 输出8 int i3 = 0x10; //十六进制0x 0~9 A~F 输出16
-
浮点数拓展:
银行业务表示钱使用BigDecimal数学工具类
//float:浮点数能表现的字长是有限的,是离散的,存在舍入误差,结果只能是一个大约数,只能是接近但不等于 //double //最好完全避免使用浮点数比较
-
字符拓展:
所有的字符本质还是数字
char c1 = 'a'; //97 char c2 = '中'; //20013 //编码 Unicode 占2个字节,最多可以表示65536个字符,最早的Excel也只有2的16次方也就是65536长 //Unicode编码形式:U0000 UFFFF char c3 = '\u0061'; //a //转义字符 // \t 制表 // \n 换行 //对象 从内存分析 String sa = new String("hello world"); String sb = new String("hello world"); sa == sb; //false 这是因为每new一次,都会在堆中创建一个新的字符串,而对于引用类型,==比较的是地址值,所以结果当然是flase了 String sc = "hello world"; String sd = "hello world"; sc == sd; //true 这是因为hello world为字符串常量,存在常量池当中,=的作用只是把常量池中的地址值复制给了变量sc和sd,所以结果当然是true了
-
布尔值扩展:
boolean flag = true; if (flag==true){} //新手程序员 if (flag){} //老手程序员 //Less is More! 代码要精简易读
四、类型转换
-
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。
低 ------------------------------->高 byte,short,char -> int -> long -> float -> double
-
运算中,不同类型的数据先转化为同一类型,然后进行运算
-
强制类型转换: (类型)变量名 高-->低
-
自动类型转换: 低-->高
int i = 128; //强制转换 byte b = (byte)i; //内存溢出 变成-128 //这是因为Byte类型数据的数据范围只有-128~127 //精度问题 (int)23.7 //23 (int)-45.89f //-45 //操作比较大的数的时候,注意溢出问题 //JDK7新特性,数字之间可以用下划线分割 int money = 10_0000_0000; int years = 20; int total = money*years;//-1474836480,计算的时候溢出了 long total2 = money*years;//默认是int,因为int*int默认是int,转换之前就已经存在问题了 long total3 = money*((long)years);//先把一个数转换为Long,这样会向上转型,所以就不存在一出问题
注意点:
-
不能对布尔值进行转换
-
不能把对象类型转换为不相干的类型
-
在把高容量转换到低容量的时候,强制转换
-
转换的时候可能存在内存溢出或者精度问题