赋值
基本数据类型赋值:基本数据类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到另一个地方
对象赋值:对一个对象进行操作时,我们真正操作的是对对象的引用。所以倘若将一个对象赋值给另一个对象,实际上是将引用从一个地方赋值到另一个地方,这意味着假若对对象使用c = d,那么c和d都指向原本只有d指向的那个对象。这种特殊的现象通常称作别名现象
class Tank{
int leval;
}
public class Assignment{
public static void main(String[] args){
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 9;
t2.leval = 27;
t1 = t2;
t1.leval = 78;
System.out.println("t1.leval = " + t1.leval); //78
System.out.println("t2.leval = " + t2.leval); //78
}
}
方法调用中的别名
当通过方法传递参数时,实际上传递的是参数对象的引用,在方法中修改参数的值,方法外面的参数也会改变
class Letter{
char c;
}
public class PassObject{
static void f(Letter y){
y.c = 'z';
}
public static void main(String[] args){
Letter x = new Letter();
x.c = 'a';
System.out.println("x.c = " + x.c); //a
f(x);
System.out.println("x.c = " + x.c); //z
}
}
算术操作符
Random rand = new Random(47);
//在创建Random时提供种子,就可以在每次执行程序时都生成相同的随机数,默认种子和系统当前时间有关
一元+
可以将较小类型的操作数提升为int
char c = 'a';
int b = +c;
关系操作符
对于基本类型== 和 !=
比较的是值是否相等,对于对象,则比较的是引用是否相等;如果要比较两个对象的实际内容是否相等,必须使用所有对象都适用的特殊方法 equals()
,但是equals()
默认行为是比较引用,所以定义类时最好重写equals()
方法,同时也要重写hashCode()
方法
截尾和舍入
在将float和double转型为整型时,总是对该数字进行截尾;如果想得到舍入的结果,就需要使用Math.round()
当类型转换成一种较小的类型时,必须留意窄化转换
的结果,否则会在类型转换过程中不知不觉的丢失信息