float java运算_Java基础-运算 - 写代码换盆的个人空间 - OSCHINA - 中文开源技术交流社区...

参数传递

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

以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。

public class Dog {

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();

}

}

在方法中改变对象的字段值会改变原对象该字段值,因为引用的是同一个对象。

class PassByValueExample {

public static void main(String[] args) {

Dog dog = new Dog("A");

func(dog);

System.out.println(dog.getName()); // B

}

private static void func(Dog dog) {

dog.setName("B");

}

}

但是在方法中将指针引用了其它对象,那么此时方法里和方法外的两个指针指向了不同的对象,在一个指针改变其所指向对象的内容对另一个指针所指向的对象没有影响。

public class PassByValueExample {

public static void main(String[] args) {

Dog dog = new Dog("A");

System.out.println(dog.getObjectAddress()); // Dog@4554617c

func(dog);

System.out.println(dog.getObjectAddress()); // Dog@4554617c

System.out.println(dog.getName()); // A

}

private static void func(Dog dog) {

System.out.println(dog.getObjectAddress()); // Dog@4554617c

dog = new Dog("B");

System.out.println(dog.getObjectAddress()); // Dog@74a14482

System.out.println(dog.getName()); // B

}

}

float 与 double

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

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

// float f = 1.1;

1.1f 字面量才是 float 类型。

float f = 1.1f;

隐式类型转换

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

short s1 = 1;

// s1 = s1 + 1;

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

s1 += 1;

s1++;

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

s1 = (short) (s1 + 1);

switch

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

String s = "a";

switch (s) {

case "a":

System.out.println("aaa");

break;

case "b":

System.out.println("bbb");

break;

}

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

long x = 111;

switch (x) { // Incompatible types. Found: 'long', required: 'char, byte, short, int, Character, Byte, Short, Integer, String, or an enum'

case 111:

System.out.println(111);

break;

case 222:

System.out.println(222);

break;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值