开发者社区> 问答> 正文

java一个final关键字的问题

这段代码为什么输出结果是那样的,难道java不是一步步往下执行吗?

 public class Test {
    public static void main(String[] args)  {
        String a = "hello2"; 
        final String b = "hello";
        String d = "hello";
        String c = b + 2; 
        String e = d + 2;
        System.out.println((a == c));
        System.out.println((a == e));
    }
}

true
false

展开
收起
蛮大人123 2016-03-26 15:21:55 1895 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    final的三种修饰,别搞混淆了
    修饰类,表示该类不能被继承,就是你不能再去写它的子类了,意思是string没有子类了
    修饰变量,修饰常量时,表示常量值固定不可更改,修饰类时表示指向的对象是固定的,不可以再指向其他对象了,但是如果对象是可变的你依然可以改变对象的内容
    修饰方法,和修饰类有点像,表示该方法不能被子类复写
    查string的源码 ,存数据的方式:
    private final char value[];
    表明String不仅不能被复写,连它里面存数组的域都是final的,意思你一旦初始化它你就没法改它了
    a==(b+2) 的理解同楼上
    a==(c+2) ,c+2 会返回 new String("hello2")而不是在常量池里寻找出来的

    2019-07-17 19:16:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载