对象赋值操作操作的是对象的引用,相当于别名。
所以在对一个赋值时另一个也会跟着改变。
对象传递给方法时也会产生该问题。
==以及!=默认是比较对象的引用(基本数据类型除外)
而equals是Object的方法,默认比较的也是对象的引用,在String等对象中由于被重写所以比较的是对象中的值。
基本数据类型之所以可以直接比较是因为基本数据类型是java特殊处理的,直接使用的是堆栈的内存空间,比较时可以直接比较对象。
而一般的对象,引用存放在堆内存空间中,而对象存放在堆栈内存空间中,比较时仅比较对象的引用,所以不能够直接比较。
this不仅可以获得当前对象的引用,还可以调用构造器。
但是只有构造器能够调用,且只能调用一次,而且必须置于最起始处。
自动初始化优先于构造函数中的初始化,因此在下面的类中,先初始化i=0,再在构造函数中变成7。这是为了确保初始化的完成。
public class Counter{
int i ;
Counter(){
i=7;
}
}
static 静态数据只有在第一次访问的时候会进行初始化。未访问或者第二三次访问均不会。
java初始化顺序
1.静态各种2.实例初始化3.构造函数
(Object ... args)
可变参数列表:实质是一个数组,允许参数为0个,在导入非Object数组如果有别的参数,则该数组也可能仅以引用成为一个参数。
printArray
((Object[])
new
Integer[]{45,23,234},
"sd"
);
输出为:[Ljava.lang.Integer;@1d209d56
sd
应该仅在一个版本的重载方法上使用可变参数列表。
switch 在jdk1.7中支持String,其实就是将String值的hashcode用来switch。