==比较值或地址,equals比较逻辑相等性;基本类型==比值,引用类型==比地址,equals默认同==,String等重写后比内容。

Java基础语法规范面试题,关键不是背答案,而是讲清楚“为什么”和“怎么用”。面试官想确认你是否真正理解语言设计逻辑,而不是只会复制粘贴代码。
数据类型与默认值要分清本质
Java有8种基本类型(byte、short、int、long、float、double、char、boolean),它们直接存值,默认值明确:数值型为0,boolean为false,char为'\u0000'(空字符,不是空格)。引用类型(如String、数组、自定义类)默认值统一为null。这点常被忽略——比如声明一个String s;未赋值时s是null,不是"",调用s.length()会抛NullPointerException。
- 数组也是对象,所以int[] arr;中arr默认为null;new int[3]后元素才默认为0
- 包装类(Integer、Boolean等)是引用类型,默认值也是null,不是0或false
- 局部变量没有默认值,必须显式初始化,否则编译报错
== 和 equals 必须说清语义差异
== 比较的是“是否同一个内存地址”,equals 比较的是“逻辑上是否相等”。对基本类型,== 就是值比较;对引用类型,== 默认仍是地址比较,除非重写了equals方法(如String、Integer)。
- Integer a = 127, b = 127; → a == b 为true(缓存池复用)
- Integer c = 128, d = 128; → c == d 为false(超出缓存范围,新建对象)
- 但a.equals(b)和c.equals(d)都为true,因为equals重写了值比较逻辑
- 自己写的类若没重写equals,默认行为等同于==
static 方法不能被重写,但可以被隐藏
static方法属于类,不依赖实例,绑定发生在编译期(静态绑定),而重写(override)依赖运行时动态绑定。所以子类里定义同名static方法,不是重写,而是“隐藏”父类方法。
立即学习“Java免费学习笔记(深入)”;
- 调用哪个static方法,看的是引用变量的声明类型,不是实际对象类型
- 例如Parent p = new Child(); p.staticMethod()调用的是Parent里的staticMethod
- private方法也不能被重写(访问权限限制),只能被继承(不可见)或在子类中重新定义(与父类无关)
数组声明和初始化要避开常见陷阱
Java数组声明推荐int[] arr而非int arr[](后者是C风格,易误导)。二维数组不是“矩形表格”,而是“数组的数组”,每行可长度不同(锯齿数组)。
- int[][] arr = new int[3][]; 合法,第一维分配了3个null引用
- int[][] arr = new int[][3]; 编译错误——第二维长度不能先指定
- int[] arr = {1,2,3}; 是静态初始化,等价于new int[]{1,2,3}
- 数组长度固定,改变大小必须新建数组并复制,ArrayList才是变长替代方案


















