关于空白final 的赋值和思考

所谓空白final 是指声明为final但未给定初始值的域

空白final可在定义处或构造器中或创建对象时赋值

如果一个类有多个空白final不可建多个构造器进行赋值 只能再一个构造器中赋值否则会显示另一个空白final未定义

代码如下:

public class ewq {
	final private String i;
	final private String i2;
	final private Integer a;

	public ewq(String ii, Integer x) {
		i2 = "构造器中赋值";
		i = ii;
		a = x;
	}

	// 只能用一个构造器 用两个构造器会显示另一个空白final未定义
	/*
	 * public ewq(String ii){ i=ii; }
	 */

	// 重写 toString方法,运用 + 将integer 类型转换为 string
	public String toString() {
		return "i2=" + i2 + "\ni=" + i + "\na=" + a;

	}

	public static void main(String[] args) {
		System.out.println(new ewq("创建对象时赋值", 2).toString());

	}

}
结果:

i2=构造器中赋值
i=创建对象时赋值
a=2

运用空白final在创建两个不同的对象时 a有什么变化?

public class ewq2 {

	final private int a;

	public ewq2(int x) {
		a = x;
		// a++;  错误 a并不能改变

	}

	public int toInteger() {

		return a;

	}

	public static void main(String[] args) {

		ewq2 w = new ewq2(3);

		System.out.println("number-->" + w.toInteger());

		System.out.println("\n---------");
		ewq2 w2 = new ewq2(10);

		System.out.println("number-->" + w2.toInteger());

	}

}
结果:

number-->3
---------
number-->10

为什么number会变成10?不是说final修饰的是不可以改变的吗!

通过debug可知 a的变化

  

ewq2 w = new ewq2(3);    a: 0-->3
<pre name="code" class="java">ewq2 w2 = new ewq2(10);  a: 0-->10

 

a是成员变量默认值为0

a的值并不是从3--->10的,因为创建对象时会分配新的内存块,而a实际是两个地址不同名称相同的变量 所以并不是a的值改变了 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值