Java 基础系列

Java 基础

3. 运算

3.1 参数传递

Java 的参数是以值传递的形式传入方法中,而不是引用传递。

在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。因此在方法中使指针引用其它对象,那么这两个指针此时指向的是完全不同的对象,在一方改变其所指向对象的内容时对另一方没有影响。

public class Person {

    String name;

    Dog(String name) {
        this.name = name;
    }

    String getName() {
        return this.name;
    }

    void setName(String name) {
        this.name = name;
    }

    String getObjectAddress() {
        return super.toString();
    }

}
public class PassByValueDemo {

    public static void main(String[] args) {
        Person person = new Person("A");
        System.out.println(person.getObjectAddress());  // Person@4554617c
        func(person);
        System.out.println(person.getObjectAddress());  // Person@4554617c
        System.out.println(person.getName());  // A
    }

    private static void func(Person person) {
        System.out.println(person.getObjectAddress());  // Person@4554617c
        person = new Person("B");
        System.out.println(person.getObjectAddress());  // Person@74a14482
        System.out.println(person.getName());  // B
    }

}

如果在方法中改变对象的字段值会改变原对象该字段值,因为改变的是同一个地址指向的内容。

class PassByValueDemo {
    public static void main(String[] args) {
            Person person = new Person("A");
            func(person);
            System.out.println(person.getName());  // B
        }
        private static void func(Person person) {
            person.setName("B");
        }
    }
}

3.2 float 与 double

Java 不能隐式执行向下转型,因为这会使得精度降低。

1.1 字面量属于 double 类型,不能直接将 1.1 直接赋值给 float 变量,因为这是向下转型。

float f = 1.1;  // 错误: 不兼容的类型: 从int转换到short可能会有损失

1.1F 字面量才是 float 类型。

float f = 1.1F;

3.3 隐式类型转换

因为字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型下转型为 short 类型。

short s1 = 1;
s1 = s1 + 1;  // 错误: 不兼容的类型: 从int转换到short可能会有损失

但是使用 += 或者 ++ 运算符可以执行隐式类型转换。

short s1 = 1;
s1 += 1;
s1++;

上面的语句相当于将 s1 + 1 的计算结果进行了向下转型:

s1 = (short) (s1 + 1);

3.4 switch

从 Java 7 开始,可以在 switch 条件判断语句中使用 String 对象。

String s = "a";
    switch (s) {
        case "a":
            System.out.println("a");
            break;
        case "b":
            System.out.println("b");
            break;
    }
}

switch 不支持 long,是因为 switch 的设计初衷是对那些只有少数的几个值进行等值判断,如果值过于复杂,那么还是用 if 比较合适。

long x = 1L;
switch (x) { // Incompatible types. Found: 'long', required: 'char, byte, short, int, Character, Byte, Short, Integer, String, or an enum'
    case 1L:
        System.out.println(1L);
        break;
    case 2L:
        System.out.println(2L);
        break;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值