在Java中,参数传递方式为值传递,但具体表现取决于参数类型:
- 基本数据类型 (如
int、double):传递的是值的副本,方法内修改不影响原始变量。 - 引用数据类型(如对象、数组):传递的是对象引用的副本(即内存地址的副本),方法内通过引用修改对象属性会影响原始对象,但重新赋值引用不会影响原始引用。
示例:
void modifyPrimitive(int num) { num = 10; } // 不影响原始值
void modifyObject(StringBuilder sb) { sb.append("!"); } // 修改对象属性
void reassignObject(StringBuilder sb) { sb = new StringBuilder("New"); } // 不影响原始引用
.java文件的类型限制
Java源代码文件(.java)需满足以下要求:
- 文件名与公共类名一致 :若文件中包含
public class,文件名必须与类名相同(区分大小写)。 - 非公共类数量不限 :一个
.java文件可包含多个非public类,但仅允许一个public类。 - 编码格式:默认UTF-8,也可通过编译器参数指定其他编码。
示例:
// 文件名为MyClass.java
public class MyClass {}
class Helper {} // 允许的非公共类
位运算
位运算直接操作二进制位,常用于高效计算或底层操作:
- 左移(
<<):低位补0,相当于乘以2的n次方。 - 右移(
>>):高位补符号位,相当于除以2的n次方(向下取整)。 - 无符号右移(
>>>):高位补0。 - 与(
&)、或(|)、异或(^):逐位运算。 - 取反(
~):按位取反。
示例:
int a = 5; // 0101
int b = a << 2; // 10100 (20)
int c = a & 3; // 0001 (1)
2*8最有效率的计算方式
使用左移位运算实现乘法效率最高,因CPU执行位运算比普通乘法快:
int result = 2 << 3; // 等价于 2 * 2^3 = 16
原理:2的二进制为10,左移3位变为10000(即16)。此方法适用于乘数为2的幂次方场景。