Java基础面试题 小记录

1. 浮点数精度丢失问题

首先举例:
下面的例子的输出值应当是0.9,但是实际输出是0.8999999……
这和计算机的二进制工作原理相关,产生精度丢失;
因为a + (-b) 时负数会转换成补码,小数位后面的补码导致精度丢失;

//计算机进行的二进制运算,
//在转换二进制时有些数字不能完全转换,只能接近
double a = 2.0;
double b = 1.1;
System.out.println(a-b);

解决精度丢失问题可以使用BigDecimal表示任意精度的小数;
在使用BigDecimal构造函数的时候推荐使用int型或者String来创建对象,以免使用double型从而产生精度丢失问题;

//使用BigDecimal类对象进行运算,
//则不会产生精度丢失问题;
BigDecimal c = new BigDecimal("2.0");
BigDecimal d = new BigDecimal("1.1");
System.out.println(c-d);

2.Java提供的三个特殊浮点数

三个特殊的浮点数分别是:正无穷大,负无穷大,非数

首先导入问题:
定义的两个整数,1 / 0 程序将会报异常

int a = 1;
int b = 0;
System.out.println(a/b);

但是对于浮点数进行除 0 运算将得到一个无穷数,infinity;
正数除 0 得到正无穷大,负数除 0 得到负无穷大;
而 0.0 除 0.0 或者 给负数开方时 将得到一个非数 NaN;

需要特别指出,所有的正无穷大都相等,所有的负无穷大也相等;
但是非数不等于任何数,也不等于本身;

//得到一个正无穷大的数
double a = 1.0;
double b = 0.0;
System.out.println(a/b);
//得到一个负无穷大的数
double a = -1.0;
double b = 0.0;
System.out.println(a/b);
//得到一个非数
double a = 0.0;
double b = 0.0;
System.out.println(a/b);
System.out.println(sqrt(-1));

3.给变量和方法命名

  • 1.要么用单词要么用拼音(英语差,qwq),总之看到名字就知道这个方法或者变量的用意就行了;
  • 2.例如 Map map 这种命名方式,将变量名命名为类型名;
  • 3.变量声明的地方要离第一次使用它的地方近,减轻阅读代码的难度;

猜你喜欢

转载自blog.csdn.net/weixin_42445650/article/details/88955954