参数传递
Java 的参数是以值传递的形式传入方法中,而不是引用传递。
以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。
package Java基础; public class PassByValueExample { public static void main(String[] args) { Dog dog = new Dog("A"); func(dog); System.out.println(dog.getName()); // B func1(dog); System.out.println(dog.getName()); // B } // 在方法中改变对象的字段值会改变原对象该字段值,因为引用的是同一个对象。 private static void func(Dog dog) { dog.setName("B"); } // 但是在方法中将指针引用了其它对象,那么此时方法里和方法外的两个指针指向了不同的对象, // 在一个指针改变其所指向对象的内容对另一个指针所指向的对象没有影响。 private static void func1(Dog dog) { System.out.println(dog.getObjectAddress()); // Dog@4554617c dog = new Dog("c"); System.out.println(dog.getObjectAddress()); // Dog@74a14482 System.out.println(dog.getName()); // C } }
float和double
Java 不能隐式执行向下转型,因为这会使得精度降低。
隐式类型转换
switch
从 Java 7 开始,可以在 switch 条件判断语句中使用 String 对象。
switch 不支持 long、float、double,是因为 switch 的设计初衷是对那些只有少数几个值的类型进行等值判断,如果值过于复杂,那么还是用 if 比较合适。