码迷,mamicode.com
首页 > 其他好文 > 详细

final变量中的宏替换

时间:2016-05-12 20:22:05      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

源代码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.



final变量中的宏替换

标签:

原文地址:http://blog.csdn.net/hcy2319964421/article/details/51356425

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!