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

自动类型转换:低-->高

注意点:

  1. 不能对布尔值进行转换
  2. 不能把对象类型转换为不相干的类型
  3. 在把高容量转换为低容量时,使用强制转换
  4. 转换时可能存在内存溢出或者精度问题

注意小事项

  • 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型
posted @ 2024-01-25 16:06  月亮警察  阅读(9)  评论(0编辑  收藏  举报