标签:lazy str 必须 static 代码 引用 his idt out
1.
public class test5 { public static void main(String[] args) { Foo obj1=new Foo(); Foo obj2=new Foo(); Foo obj3=obj1; System.out.println(obj1==obj2); System.out.println(obj1==obj3); } } class Foo { int value=100; }
输出结果:
当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等。
而施加于引用类型变量时,是比较两个变量是否引用同一个对象。
引用代表地址值,所以“==”实际上是比较对象的地址是否相等。
obj1,obj2都开辟了一个空间所以地址值不同,
obj3的地址实际指向obj1,所以为true。
2.
public class test5 { public static void main(String[] args) { Foo obj1=new Foo(); } } class Foo { int value; public Foo(int initValue) { value=initValue; } public Foo() {} }
由于Foo定义了构造方法,所以系统不会再提供默认构造方法,
所以必须定义Foo的无参构造方法。
3.
代码如下:
public class test5 { public static void main(String[] args) { InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new InitializeBlockClass(300); System.out.println(obj.field); } } class InitializeBlockClass { { field=200; } public int field=100; public InitializeBlockClass(int value) { this.field=value; } public InitializeBlockClass() { } }
运行结果:
我们可以调整
{
field=200;
}
的位置观察结果
从这几个实验中不难看出规律;
对于对象的无参构造,field最终的值与初始化类字段的位置有关,即是按照线性顺序执行初始化类字段与其他语句的。
但对于对象的有参数的构造,field的值与初始化类字段无关至于有参构造方法有关。
标签:lazy str 必须 static 代码 引用 his idt out
原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/13778144.html