美文网首页
执行宏替换的变量

执行宏替换的变量

作者: 李霖神谷 | 来源:发表于2017-04-06 00:02 被阅读146次

final一个重要的用途就是定义宏变量,当定义final变量就为变量指定初始值,而这个值在编译时期就确定下来,那么这个变量就是一个宏变量,编译器会把所有使用改变量的地方直接替换改变量的值。

public class Demo{
    public static void main(String[] args) {
        final String a="java"+"liahuai";
        final String b="lishuai"+18;
        final String b2="lishuai"+String.valueOf(18);
        System.out.println(b=="lishuai18");
        System.out.println(b2=="lishuai18");
        String s1="java1";
        String s2="java2";
        String s3=s1+s2;
        System.out.println(s3=="java1java2");
        final String s4="java4";
        final String s5="java5";
        String s6=s4+s5;
        System.out.println(s6=="java4java5");
    }
}

上面代码b,b2没有什么太大区别,只是在定义b2变量时显示将数值18转化成字符串型,由于该变量的值需要调用Stringt类型的方法,因此编译器无法在编译时期就确定b2的值,所以b2不会被当成宏变量来处理。
由于s1,s2是两个普通变量,编译器不会执行宏变量,因此编译器不会在编译时期确定s3的值,不会让s3指向字符串池中缓存的“java1java2”。
对于final实例而言,只有定义该变量的指定初始值才会有宏变量的效果,在非静态初始化块中,构造器中对final变量制指定初始值都不会有这种效果。
如果程序需要在匿名内部类中使用局部变量,那么这个局部变量必须使用final修饰符修饰。

public class Demo {
    public static void main(String[] args) {
        final String s = "java";
        new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println(s + " " + i);
                }

                try {
                    Thread.sleep(100);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }).start();

    }
}

相关文章

  • 执行宏替换的变量

    final一个重要的用途就是定义宏变量,当定义final变量就为变量指定初始值,而这个值在编译时期就确定下来,那么...

  • 读《Thinking in Java》第4版笔记

    宏:编译器预处理,将变量替换为常量,提高程序运行效率。在Java中,final变量就是一个“宏变量”,编译器会把程...

  • Java中的宏变量,宏替换详解。

    群友在微信群讨论的一个话题,有点意思,特拿出来分享一下。 首先来看下面这段程序,和群友分享的大致一样。 程序输出:...

  • const修饰全局变量取代宏定义

    const修饰全局变量取代宏定义 宏定义 C系程序中广泛使用宏定义,宏只是一种简单的字符串替换,根据是否带参数分为...

  • 建议3:iOS尽量使用const,enum来替换预处理#defi

    define定义了一个宏,在编译开始之前就会被替换。 const只是对变量进行修饰,当试图去修改该变量的时候,编译...

  • 宏定义注意事项

    宏定义 为一段代码定义一个标识, 在编译之前将使用宏名的地方替换为宏值,这个替换的过程叫宏替换也叫宏代换 注意: ...

  • 【C/C++】宏(macro)定义与使用

    文章结构如下: 宏的定义 宏的替换与代码展开 宏的替换产生的问题 获取宏参数名称 宏参数的结合 宏的取消 宏定义的...

  • define中的#, ##, __VA_ARGS__,##__V

    define 宏定义 执行时间:编译时执行替换 特殊符号:# 作用:用来把参数转化为字符串示例: 特殊符号:## ...

  • iOS_预处理命令

    宏定义(执行原理就是直接查找替换)被代表的部分多行时可使用\号连接#define PI 3.1415926定义...

  • iOS开发 宏和const的选择

    思考:宏与常/变量的选择? * 宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字...

网友评论

      本文标题:执行宏替换的变量

      本文链接:https://www.haomeiwen.com/subject/mkzxattx.html