工信部信息备案网站查询,怎么做软文网站,帝国做网站的步骤,技成培训网官方网站转载自 Java中的宏变量#xff0c;宏替换详解。群友在微信群讨论的一个话题#xff0c;有点意思#xff0c;特拿出来分享一下。输出true false来看下面这段程序#xff0c;和群友分享的大致一样。
public static void main(String[] args) {String hw hello world宏替换详解。群友在微信群讨论的一个话题有点意思特拿出来分享一下。输出true false来看下面这段程序和群友分享的大致一样。
public static void main(String[] args) {String hw hello world;String hello hello;final String finalWorld2 hello;final String finalWorld3 hello;final String finalWorld4 he llo;String hw1 hello world;String hw2 finalWorld2 world;String hw3 finalWorld3 world;String hw4 finalWorld4 world;System.out.println(hw hw1);System.out.println(hw hw2);System.out.println(hw hw3);System.out.println(hw hw4);
}
程序输出
false
true
false
true
同样是字符串hello为什么用final定义的且个进行操作却是true有一个是false而没用final的却是false?
首先来理解下宏变量
Java中一个用final定义的变量不管它是类型的变量只要用final定义了并同时指定了初始值并且这个初始值是在编译时就被确定下来的那么这个final变量就是一个宏变量。编译器会把程序所有用到该变量的地方直接替换成该变量的值也就是说编译器能对宏变量进行宏替换。
如
final String a hello;
final String b a;
final String c getHello();
a在编译期间就能确定下来而b、c不行所以a是宏变量b、c不是。
所以再回到上面的程序finalWorld2和finalWorld4是final定义的也是在编译期间能确定下来的所以它能被宏替换编译器就会让finalWorld2和finalWorld4指向字符串池中缓存的字符串hello world所以它们就是同一个对象。