java关键字final(宏)

java关键字final(宏)

final是java中的一个关键字,可以修饰类,成员变量,局部变量,方法,表示不可变。
当final修饰一个变量的时候,已经为该变量指定了初始值,那么这个变量在编译的时候就已经确定了下来,那么这个final变量就相当于c语言中的宏变量,编译器会把程序中的所有用到该变量的地方替换成为该变量的值

class Test{
	public static void main(String[] args) {
		String s1 = "helloworld";
		String s2 = "hello" + "world";
		System.out.println(s1==s2);
		// String s3 = "hello";
		// String s4 = "world";
		final String s3 = "hello";
		final String s4 = "world";
		String s5 = s3+s4;
		System.out.println(s5==s1);

	}
}

上述程序中,如果s3与s4不添加final,那么s5 == s1就会输出false,但是如果s3与s4添加了final修饰词,那么s5 == s1就会输出true
原因是因为:
java使用常量池来管理曾经使用过的字符串直接量,例如执行String s1 = "helloworld"之后,系统的常量池中就会缓存一个字符串"java",如果这个时候程序再次执行String b = "helloworld"后,系统就会将String b直接指向常量池中的"java"字符串,因此s1 == s2会返回true
对于s5,如果s3与s4不添加final,那么s3与s4就是两个普通的变量,编译器不会进行"宏替换",因此编译器无法确定s5的值,就无法将⬆s5指向常量池中的缓存,所以s5 == s1输出false

运行结果如下
java关键字final(宏)

上一篇:腾讯云服务器标准型S5、S4、S3、S2区别及怎么选择?


下一篇:udp协议的数据接收与发送的代码