JAVA基础--数据类型及注意事项
Java的数据类型(笔试考题)
Java是强类型语言:要求变量使用要严格符合规定,所有变量都必须先定义后才能使用
基本类型(primitive type)
数据类型
-
整数类型
byte(1字节):-128~127
short(2字节):-32768~32767
int(4字节):-2147483648~2147483647(最常用)
long(8字节):-9223372036854775808~9223372036854775807(赋值时再数字后加个L,用于分辨)
long a = 1000000000L;//尽量使用大写L,因为小写l和数字1很像
-
浮点类型:
float(4字节)(赋值时在数值后加F,用于区分)
float a = 23.4F;
double(8字节)
-
字符类型:char(2字节)
注意:String为字符串类型,但String是类不是关键字
boolean类型
占1位(bit),且值只有true和false
1字节(B)=8位(b)
引用类型(reference type)
- 类
- 接口
- 数组
常见的问题(面试考题)
整数拓展:进制表示
- 二进制:0b开头(0b10=2)
- 十进制:正常数值(10)
- 八进制:0开头(010=8)
- 十六进制:0x开头(0x10=16)
浮点数拓展:
银行业务怎么表示?(钱)
使用BigDecimal (数学工具类)表示银行业务
不可使用浮点数(float/double)进行表示,因为浮点数是有限、离散的,有舍入误差,是大约、接近的数值,近似但不等于;
例如:
float f=0.1f;//0.1
double d=1.0/10;//0.1
//输出f==d的值为false
float d1=231312131212345f;
float d2=d1+1;
//输出d1==d2的值为true
注意:最好完全避免使用浮点数进行比较!!!
字符类拓展:强制转换
所有的字符本质还是数字
Unicode编码:0~65536(2的16次方)
表示方法:U0000、UFFFF
char c1='a';
char c2='中';
System.out.println(c1);//输出a
System.out.println((int)c1);//强制转换:输出97(a的ASCILL码值)
System.out.println(c2);//输出中
System.out.println((int)c2);//强制转换:输出20013
//Unicode编码
char c3='\u0061';//'\u'是转意字符,表示Unicode编码
System.out.println(c3);//输出a
转意字符
- \t:制表符
- \n:换行
- ........
布尔值拓展
boolean flag=true;
//以下两行代码意思是相同的(代码要精简易读)
if(flag==true){}
if(flag){}
类型转换
强制转换:从高转为低
-
(低容量)byte、short、char-->int-->long-->float-->double(高容量)
-
格式:(类型)变量名
int i = 128;
//byte的范围是0-127,将i强制转为byte类型会出现内存溢出
byte b = (byte)i;
System.out.println(i);//输出128
System.out.println(b);//输出任意数字
//高转低
System.out.println((int)23.7);//输出23
System.out.println((int)-45.89f);//输出-45
//低转高
char c = 'a';
int d = c + 1;
System.out.println(d);//输出98,a为97
//高转低
System.out.println((char)d);//输出b
自动类型转换:低-->高
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换为低容量时,使用强制转换
- 转换时可能存在内存溢出或者精度问题
注意小事项
- JDK7的新特性,数字之间可以使用下划线分割,下划线不会被打印
//以下两句相等
int money=1000000000;//1亿
int money=10_0000_0000;//1亿
- 操作比较大的数时,注意溢出问题
int money=10_0000_0000;//1亿
int years=20;
int total=money*years;//输出-1474836480,计算时出现溢出
long tital2=money*years;//输出-1474836480,转换前已经存在问题
long tital3=money*((long)years);//输出:20000000000,正确做法强制转换,先把一个转为long型