Java基础 - 04 - 数据类型拓展和面试题

Java基础 - 04 - 数据类型拓展和面试题


一、整数拓展:进制问题

  • 二进制 0b开头
  • 八进制 0开头
  • 十进制 就是我们平时使用的数
  • 十六进制 0x开头

当然,Java中也可以输出进制数:

int i = 10;
int i2 = 010;   //八进制0
int i3 = 0x10;  //十六进制0x

System.out.println(i);
System.out.println(i2);
System.out.println(i3);

二、浮点数拓展:银行业务怎么表示?这么多钱

先提出答案:Java中有一个数学工具类BigDecimal可以表示
但为什么不用浮点数表示呢?而且切记:

  • 最好完全避免使用浮点数进行比较
  • 最好完全避免使用浮点数进行比较
    最好完全避免使用浮点数进行比较

先看例子:

float f = 0.1f;     //0.1
double d = 1.0/10;  //0.1

System.out.println(f==d);//false
System.out.println(f);
System.out.println(d);

float d1 = 15665165165161f;
float d2 = d1 + 1;

System.out.println(d1==d2);//true

上面例子中,float fdouble d输出都是0.1但是比较他们大小的时候返回的为false
当定义float d2 = d1 + 1;时,比较d1d2的大小时却为true

从上面总结出浮点数可以用这几个词来描述:有限、离散、舍入误差、大约、接近但不等于
所以不能用这种数据类型来表示银行的钱


三、字符拓展

字符可以是中文字符,也可以是英文字符

char c1 = 'a';
char c2 = '中';

我们可以把这两个字符输出,也可以把这两个类型强制转换成int型(类型强制转换在要转换的标识符前加()里面写要转换成什么类型)

System.out.println(c1);
System.out.println(c2);

System.out.println((int)c1);//97
System.out.println((int)c2);//20013

c1本来结果为ac2本来是中文,但转成int类型后,c1变成了97c2变成了20013,这里得出结论:
所有的字符在本质上还是数字


四、其他拓展

char 数据类型涉及到了一个知识点:编码

编码:Unicode
  • 编码可以处理各种语言文字 它有一张编码表:
  • 这个表中的97对应的就是a65对应的就是A
  • 编码值占两个字节,最多可以表示0 ~ 65536
  • 在Excel表中,行数最多只有2的16次方,而2的16次方就等于65536
  • Unicode编码的表示方式是U0000 UFFFF,范围就是U0000-UFFFF

在Java中,前面加上一个\就能转义,\u代表给后面这个数字转义

char c3 = '\u0061';
System.out.println(c3);//a

转义字符
转义字符意义ASCII码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\代表一个反斜线字符’’’092
代表一个单引号(撇号)字符039
"代表一个双引号字符034
?代表一个问号063
\0空字符(NUL)000
\ddd1到3位八进制数所代表的任意字符三位八进制
\xhh十六进制所代表的任意字符十六进制

注意:
1. 区分,斜杠:"/" 与 反斜杠:"" ,此处不可互换
2. \xhh 十六进制转义不限制字符个数 ‘\x000000000000F’ == ‘\xF’


好玩的操作——以后会学习的
String sa = new String("Hello world");
String sb = new String("Hello world");
System.out.println(sa == sb);//false

String sc = "Hello world";
String sd = "Hello world";
System.out.println(sc == sd);//true

private static class Sring {
  public Sring(String hello_world) {
  }
}

当String作为一个对象被new时,相同的一串字符串却不相等
当String作为一个变量被定义时,相同的一串字符串会是相等的


布尔值拓展
boolean flag = true;
if(flag==true){ }//如果flag为true则运行大括号中的代码
if(flag){ }//和上面一样

以后会学到一个知识点——条件
第二句表示如果flag为true则运行大括号中的代码
第三句和第二句含义相似

而新手会像第二行一样写代码,而老手会写第三行的
Java中有这样一个概念:Less Is More! —— 代码要精简易读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值