JAVA中的宏

在java中,被final关键字修饰的变量,且设置了初始值,那么这个值在编译阶段就已经确定了值,则这个变量就是“宏变量”,编译器会把用到该变量的地方全部都替换成设置好的那个值。简单点说就是“被final关键字修饰且给了初始值的变量就是宏变量”。

下面看一个例子:

 @Test
    public void test2() {
        String s1="java";
        String s2="ja"+"va";
        System.out.println(s1==s2);
        String str1="ja";
        String str2="va";
        String s3=str1+str2;
        System.out.println(s1==s3);
    }

输出结果:

true

false

dubug截图:


可以看到s1和s3确实不等。简单分析一下:

s1=“java”,“java”是字符串常量,我们知道是放在常量池中。s2="ja"+"va",会先去常量池中找是否存在“java”这个字符串,如果存在会把s2指向“java”的地址,所以s1和s2指向同一个地址,也就相等了。而s3=str1+str2是两个普通变量运算,编译器不执行宏替换,所以不相等。

下面用final修饰str1和str2

@Test
    public void test2() {
        String s1="java";
        String s2="ja"+"va";
        System.out.println(s1==s2);
        final String str1="ja";
        final String str2="va";
        String s3=str1+str2;
        System.out.println(s1==s3);
    }

输出结果:

true

true


我们可以看到s1和s2相等,被final修饰后,str1就会被替换为“ja”,str2会被替换为“va”,所以s3=str1+str2等价于s3="ja"+"va",所以s1和s3相等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值