A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 原满 中级黑马   /  2013-5-31 10:51  /  1250 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 原满 于 2013-6-1 10:07 编辑

public class FinalTest {
  
    final String str1;
    final String str2;
    final String str3 = "abc";
   
    {
        str1 = "abc";
    }

    public FinalTest() {
        str2 = "abc";
    }

    public void show() {

        System.out.println(str1 + str1 == "abcabc");

        System.out.println(str2 + str2 == "abcabc");

        System.out.println(str3 + str3 == "abcabc");

    }

    public static void main(String[] args) {
        FinalTest test = new FinalTest();
        test.show();
    }
}

运行结果:
false
false
true

求解释一下结果。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 4968547610317 于 2013-5-31 11:32 编辑

final关键字的应用:当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值.
    你的程序中,str1和str2都被final所修饰,构造代码块会先于show方法运行,将值赋给str1和str2。而str3一开始就被赋值.既三个变量都被赋值“abc”。
  public void show() {
            System.out.println(STR1 + STR1);
            System.out.println(STR2 + STR2);
            System.out.println(STR3 + STR3);
            System.out.println((STR1 + STR1 )==( "abcabc"));
            System.out.println((STR1 + STR1 ).equals( "abcabc"));
            String s=STR3 + STR3;
            System.out.println(s == "abcabc");
            System.out.println(STR3 + STR3 == "abcabc");
    }
abcabc
abcabc
abcabc
false
true
true
true
由结果可知用==是可以比较的,但是只能是一个固定值跟另一个值比较,里面不能有运算。用equals则没有这种问题

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
public class FinalText {

        final String STR1;//final修饰的是变量是一个常量,字母应该大写
    final String STR2;
    final String STR3 = "abc";
   
   {
           STR1 = "abc";
    }

    public FinalText() {
            STR2 = "abc";
    }

    public void show() {
            System.out.println(STR1 + STR1);
            System.out.println(STR2 + STR2);
            System.out.println(STR3 + STR3);

        System.out.println((STR1 + STR1) .equals("abcabc"));

        System.out.println((STR2 + STR2) .equals("abcabc"));

        System.out.println((STR3 + STR3) .equals("abcabc"));

    }

    public static void main(String[] args) {
            FinalText test = new FinalText();
        test.show();
    }
}
结果为:
abcabc
abcabc
abcabc
true
true
true
final修饰的变量是一个常量,常量的字母应该大写
字符串的比较用equals

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马