您的位置:首页 > 其它

final变量中的宏替换

2016-05-09 21:44 211 查看
源代码1:

public class Java15 {
public static void main(String[] args) {
String s1="疯狂java";
String s2="疯狂"+"java";
System.out.println(s1==s2);
String str1="疯狂";
String str2="java";
String s3=str1+str2;
System.out.println(s1==s3);
}
}

运行结果:



源代码2:

public class Java15 {
public static void main(String[] args) {
String s1="疯狂java";
String s2="疯狂"+"java";
System.out.println(s1==s2);
final String str1="疯狂";
final String str2="java";
String s3=str1+str2;
System.out.println(s1==s3);
}
}
运行结果:



源代码3:

public class Java15 {
public static void main(String[] args) {
String s1="疯狂java";
String s2="疯狂"+"java";
System.out.println(s1==s2);
final String str1;
str1="疯狂";
final String str2;
str2="java";
String s3=str1+str2;
System.out.println(s1==s3);
}
}
运行结果:



1.变量在编译时是无法确定的,而常量(直接量在编译时)是确定的;则上面源代码1中s1,s2是可以确定的,它们都指向常量池中的疯狂java,所以s1=s2;而str1,str2由于是变量,它们是不可以确定的,则它们指向就不同了,所以,str2!=str2;

2.在源代码2中由于将str1,str2都用了final修饰,都将他们定义为了宏定义,所以str1,str2将不再是变量;

3.对于final实例变量而言,只有在定义该变量时指定初始值才会有宏变量的效果,由于源代码3中在定义时并没有初始化,所以没有初始化效果,所以此时str1,str2是未知量,所以str1!=str2.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: