【Java基础】运算

参数传递

class A {
	int value;
}

public class PassTest {
	public static void main(String[] args) {
		A a = new A();
		System.out.println(a.value); // 0
		fun1(a);
		System.out.println(a.value); // 0
		fun2(a);
		System.out.println(a.value); // 1
	}

	static void fun1(A a) {
		a = new A();
		a.value = 1;
	}

	static void fun2(A a) {
		a.value = 1;
	}
}

函数里改变引用,对参数本身是没有影响的
如果改变引用上的内容,对参数本身是由影响的

float 与 double

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

// float f = 1.0; cannot convert from double to float
float f = 1.0f; // 正确的方式

1.0字面量属于double类型;1.0f字面量才是float类型

隐式类型转换

public static void main(String[] args) {
	short s = 1;
	// s = s + 1; // cannot convert from int to short
	s += 1;
	s++;
}

编译后

Code:
  stack=2, locals=2, args_size=1
     0: iconst_1
     1: istore_1
     2: iload_1
     3: iconst_1
     4: iadd
     5: i2s
     6: istore_1
     7: iload_1
     8: iconst_1
     9: iadd
    10: i2s
    11: istore_1
    12: return

short类型的加法都是利用int类型的指令来操作的,最后利用i2s转为short类型
byte和char也是同样的效果

所以 s + 1的结果是int类型,无法隐形转为short类型

但是 += 和 ++ 编译器会自动转换,属于Java的语法糖,如下:

short s = 1;

s += 1;
等价于
s = (short)(s + 1);

s++;
等价于
s = (short)(s + 1);

switch

  • switch 可作用于char byte short int
  • switch 可作用于char byte short int对应的包装类
  • switch 不可作用于long double float boolean,包括他们的包装类
  • switch 中可以是字符串类型(JDK1.7后)
  • switch 中可以是枚举类型(JDK1.5后)

关于String的switch实现,使用hashcode转化为int类型来实现,再加上equal方法做保障,也属于Java的语法糖。

参考

猜你喜欢

转载自blog.csdn.net/qq_21687635/article/details/89598774