Java入门基础 哪些细节是你不知道的

102 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

除法精度

java算术运算符中的 / 除法我们都知道,但是在计算机中的运算并不是 我们想的那样

10 / 4
10 / 4 = 2 // 不是2.5

精度提升

10.0 / 4 = 2.5
double d = 10 / 4
double d = 10 / 4 // ===> 把2赋值给d
d = 2.0

取余本质

在java的算术预算符 我们都知道 % 是取余或者取模的意思但是它的的运算方式你知道吗
例子:

10 % 3 ?
-10 % 310 % -3  ?
-10 % -3

% 的本质是 公式 a % b = a - a / b * b
其中,等号右边的a / b的值向0靠近(当a和b的符号不同时

所以

10 % 3 =1
-10 % 3 = -1
10% -3  = 1 
-10 % -3 = -1 (-10)-(-10)/(-3)*(-3)= -1
System.out.println(10 % 3);//输出1
System.out.println(-10 % 3);//输出-1
System.out.println(10 % -3);//输出1

取余和取模的区别

在编程语言中,取余和取模运算,都是用%来表示。

对整型变量a、b来说,求余运算和取模运算的公式都是:(分2步进行) Step1:c = a / b; Step2:a % b = a - c * b; 取余和取模的区别就在于c取值的不同。

对于取余:在计算c的值时,向0方向舍入;

对于取模:在计算c的值时,向负无穷方向舍入。

带来的问题是:

当a和b正负号相同时,取余和取模在计算c的值时,得出的结果是相同的。即此时0方向和负无穷方向是一个方向。------->此时取余运算和取模运算的结果是相同的,因此可以把两者看成是一样的。
当a和b的正负号不同时,此时取余和取模在计算c的值时,得出的结果是不相同的。------->从而此时的取余就不等于取模。

int a = -5;
int b = 3;
int c = a / b;//取余运算,c的值为-1;取模运算,c的值为-2
int d = a % b;////取余运算,d = -5 - (-1 * 3) = -2;取模运算,d = -5 - (-2 * 3) = 1
public class ArithmeticOperator{

    public static void main(String[] args){

        System.out.println(-5 % 3);//输出-2

        System.out.println(5 % -3);//输出2

    }
}

算术预算符自增 自减

在java的算术预算符自增 自减 i++ ++i i-- --i

前++ 和后++ 作为独立使用时候 完全等价于 i= i + 1 作为表达式使用的话

++i i先自增 再赋值
i++ i先赋值 再自增

例子
独立使用

int a = 5
 a++
 ++a
 a = 7

表达式使用

int j = 8
int k = ++j //等价于 j= j+1    k=j
k = 9 j = 9

int j = 8
int k = j++ //等价于 k=j    j=j+1 
k = 8 j = 9

面试题

例子1:

int i = 1
i = i++
System.out.printIn(i) // 1

解析:
在运算过程中 会在内存中有个临时变量temp
1.temp = i 
2.i = i + 1
3.i= temp

例子2:

int i = 1
i = ++i
System.out.printIn(i) // 2

解析:
在运算过程中 会在内存中有个临时变量temp
1.i = i + 1  
2.temp = i
3.i= temp