重温经典《Thinking in java》第四版之第三章 操作符(十七)

简介: 重温经典《Thinking in java》第四版之第三章 操作符(十七)

3.5 算术操作符这部分如果你有其他语言的学习历程,可以很好理解,懂点数学上的四则运算的基本知识也可以,因为这块是属于数学上的算数计算。

importjava.util.*; 
importstaticnet.mindview.util.Print.*; 
publicclassMathOps { 
publicstaticvoidmain(String[] args) { 
// Create a seeded random number generator: Randomrand=newRandom(47); 
inti, j, k; 
// Choose value from 1 to 100: j=rand.nextInt(100) +1; 
print("j : "+j); 
k=rand.nextInt(100) +1; 
print("k : "+k); 
i=j+k; 
print("j + k : "+i); 
i=j-k; 
print("j - k : "+i); 
i=k/j; 
print("k / j : "+i); 
i=k*j; 
print("k * j : "+i); 
i=k%j; 
print("k % j : "+i); 
j%=k; 
print("j %= k : "+j); 
// Floating-point number tests: floatu, v, w; // Applies to doubles, too v=rand.nextFloat(); 
print("v : "+v); 
w=rand.nextFloat(); 
print("w : "+w); 
u=v+w; 
print("v + w : "+u); 
u=v-w; 
print("v - w : "+u); 
u=v*w; 
print("v * w : "+u); 
u=v/w; 
print("v / w : "+u); 
// The following also works for char, // byte, short, int, long, and double: u+=v; 
print("u += v : "+u); 
u-=v; 
print("u -= v : "+u); 
u*=v; 
print("u *= v : "+u); 
u/=v; 
print("u /= v : "+u); 
    } 
}

/* Output:

j : 59

k : 56

j + k : 115

j - k : 3

k / j : 0

k * j : 3304

k % j : 56

j %= k : 3

v : 0.5309454

w : 0.0534122

v + w : 0.5843576

v - w : 0.47753322

v * w : 0.028358962

v / w : 9.940527

u += v : 10.471473

u -= v : 9.940527

u *= v : 5.2778773

u /= v : 9.940527

*/

上面的例子很全面,包含了整数和浮点数的加减乘除取余的四则运算。主要是有个Random类的对象生成一个随机整数或者小数,所以你每次的运行上面的数字都是不一样的。int和float在做除法的时候有个不同,整数的除法还是整数,如果有小数就把小数部分去掉了,所以它的结果是不精确的,不能说他错误(这里主要是为了保证类型一致)。而小数的除法是属于准精确的结果,不是完全精确,会有一些精度损失,遇到无限小数的情况下是肯定不准确的。这部分可以自己练习体会一下。

一元加、减操作符可以作为运算符缩写的一种,也可以作为一个数字正负判断的依据。例如

x=-a等同于x=x-a

x=a*(-b)这里的-就代表b的负数

下面一小节的自增自减符号,跟我们的一元加、减符号起到了类似的效果,只是多了一个前后语义上的问题。看下面的例子:

importstaticnet.mindview.util.Print.*; 
publicclassAutoInc { 
publicstaticvoidmain(String[] args) { 
inti=1; 
print("i : "+i); 
print("++i : "+++i); // Pre-increment print("i++ : "+i++); // Post-increment print("i : "+i); 
print("--i : "+--i); // Pre-decrement print("i-- : "+i--); // Post-decrement print("i : "+i); 
    } 
}

/* Output:

i : 1

++i : 2

i++ : 2

i : 3

--i : 2

i-- : 2

i : 1

*///:~

++i是对i先加1后用i,i++是先用i再对i加1;--类似,最终++和--的操作数的数值都发生了变化;琢磨一会就可以了。

目录
相关文章
|
29天前
|
Java 编译器
Java“操作符 ... 不能应用于 x”解决
当Java编译器报错“操作符 ... 不能应用于 x”时,通常是因为你尝试对不支持该操作符的数据类型执行了操作。解决方法包括:确保数据类型兼容、使用正确的类型转换或选择合适的方法。检查代码中的变量类型和操作符使用是否正确。
|
6月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
6月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
57 2
|
5月前
|
缓存 并行计算 Java
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
|
6月前
|
存储 Java 编译器
Java基础教程(4)-Java中的操作符
【4月更文挑战第4天】Java中的String是常用类,字符串是不可变对象,用双引号表示。String对象在编译期长度受限于65535,运行期不超过Int范围。字符串方法如length()、substring()、replace()、equals()等提供了多种操作。可变字符串可使用StringBuffer或StringBuilder。String对象通过字符串池优化内存,池中已有相同内容字符串则返回其引用。
|
6月前
|
设计模式 算法 Java
重温经典《Thinking in java》第四版之第九章 接口(四十七)
重温经典《Thinking in java》第四版之第九章 接口(四十七)
48 0
|
6月前
|
安全 Java 程序员
重温经典《Thinking in java》第四版之第八章 多态(四十五)
重温经典《Thinking in java》第四版之第八章 多态(四十五)
51 1
|
6月前
|
存储 设计模式 缓存
Java instanceof操作符:类型检查的必备工具
Java instanceof操作符:类型检查的必备工具
89 0
|
6月前
|
Java 编译器 C++
重温经典《Thinking in java》第四版之第九章 接口(四十六)
重温经典《Thinking in java》第四版之第九章 接口(四十六)
40 0
|
10天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
下一篇
无影云桌面