Java小白踩坑录 - 初级、中级和高级程序员之间,究竟有哪些差异?

简介: Java小白踩坑录 - 初级、中级和高级程序员之间,究竟有哪些差异?

image.png


ROUND 1

public class TestOdd {
 public static void main(String[] args) {
 int oddNum=153;
 System.out.println(isOdd(oddNum));
 int evenNum=9284;
 System.out.println(isOdd(evenNum));
 }
 public static boolean isOdd(int i){
 return i % 2 == 1;
 }
} 

小白:奇数(odd)指不能被 2 整除的数 ,数学表达形式为:2k+1,因此我就写了一个方法,根据求余之后的值是否为 1 来判断。

接下来轮到小王的程序了。

ROUND 2


public class TestOdd {
 public static void main(String[] args) {
 /**
 * A constant holding the minimum value an {@code int} can
 * have, -2<sup>31</sup>. 
 @Native public static final int MIN_VALUE = 0x80000000;
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1. 
 @Native public static final int MAX_VALUE = 0x7fffffff;
 */
 int oddNum=Integer.MAX_VALUE;
 System.out.println(isOdd(oddNum));
 int evenNum=Integer.MIN_VALUE;
 System.out.println(isOdd(evenNum));
 }
 public static boolean isOdd(int i){
 return i % 2!=0;//如果一个数是偶数,就算是负数整除2余数也为0
 }
}

小王:因为 int 的整数范围为 -2^{31}−231 ~2^{31}-1231−1 ,即在所有的 int 数值中,有一半都是负数,如果 i 为负数,所有的求余都是负数,不会等于 1,例如 i=-5,i%2=-1。所以考虑正负整数的情况下,i 需要满足求余不等于 0。


接下来轮到扫地僧的程序了。



ROUND 3

public class TestOdd {
 public static void main(String[] args) {
 /**
 * A constant holding the minimum value an {@code int} can
 * have, -2<sup>31</sup>. 
 @Native public static final int MIN_VALUE = 0x80000000;
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1. 
 @Native public static final int MAX_VALUE = 0x7fffffff;
 */
 int oddNum=Integer.MAX_VALUE;
 System.out.println(isOdd(oddNum));
 int evenNum=Integer.MIN_VALUE;
 System.out.println(isOdd(evenNum));
 }
 public static boolean isOdd(int i){
 return (i & 1)!=0;//1的十六进制为0x00000001,本质是取二进制的最后一位的值
 }
}

扫地僧:不管 int 的数据是怎么样子的,它在计算机里都是二进制表示,想要判断是否为 0,根据二进制的特点 (2^n2n+…+2^020 ),只需要看看二进制的 最后一位 是 1, 还是 0 即可,最快的办法就是使用 & 提取二进制的最低位来判断。



尾声

经过这次事件后,对小白的触发挺大的。虽然上面的程序不能完全说清楚就是初级、中级和高级的区分,但至少从思路上来说,初级、中级、高级的区分还是很明显的。


目录
相关文章
|
1月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
60 9
|
4月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
148 4
|
4月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
73 9
|
4月前
|
Java 程序员
Java数据类型:为什么程序员都爱它?
Java数据类型:为什么程序员都爱它?
55 1
|
29天前
|
SQL 存储 Java
面向 Java 程序员的 SQLite 替代品
SQLite 是轻量级数据库,适用于小微型应用,但其对外部数据源支持较弱、无存储过程等问题影响了开发效率。esProc SPL 是一个纯 Java 开发的免费开源工具,支持标准 JDBC 接口,提供丰富的数据源访问、强大的流程控制和高效的数据处理能力,尤其适合 Java 和安卓开发。SPL 代码简洁易懂,支持热切换,可大幅提高开发效率。
|
1月前
|
SQL Java 程序员
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
2月前
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
24 5
|
2月前
|
Java 大数据 程序员
我的程序员之路:自学Java篇
我的程序员之路:自学Java篇
|
4月前
|
JavaScript 前端开发 Oracle
|
4月前
|
安全 Java 程序员
阿里开发手册 嵩山版-编程规约 (四)OOP规约-Java程序员必看知识点!!!
《阿里开发手册 嵩山版》的OOP规约部分强调了面向对象编程的最佳实践,包括正确使用静态方法、覆写方法的注解、可变参数的使用、接口的稳定性、equals和compareTo方法的使用、BigDecimal的正确比较、包装类与基本数据类型选择、POJO类的属性和方法设计等,以提升代码的质量和维护性。