Java基础语法要点

  • 1、Java中byte、short、int、long的取值范围

    byte:[-128,127]

    short:[-32768,32767]

    int:[-2147483648,2147483647]

    long:[-9223372036854775808,9223372036854775807]

 

  • 2、声明long类型的变量,在数字后面加大写L 
    long lNum = 999999999L;

 

  • 3、Java在拼接字符串时,+和StringBuilder(这个类只在J2SE5及以上版本提供,以前的版本使用StringBuffer类)的区别

    我们看如下的代码

    public static void main(String[] args){
          String s = "abc";
          String ss = "ok" + s + "xyz" + 5;
          System.out.println(ss);
      }

    将上述代码反编译后的代码

    public static void main(String args[]){
        String s = "abc";
        //    0    0:ldc1            #16  <String "abc">
        //    1    2:astore_1        
        String ss = (new StringBuilder("ok")).append(s).append("xyz").append(5).toString();
        //    2    3:new             #18  <Class StringBuilder>
        //    3    6:dup             
        //    4    7:ldc1            #20  <String "ok">
        //    5    9:invokespecial   #22  <Method void StringBuilder(String)>
        //    6   12:aload_1         
        //    7   13:invokevirtual   #25  <Method StringBuilder StringBuilder.append(String)>
        //   8   16:ldc1            #29  <String "xyz">
        //    9   18:invokevirtual   #25  <Method StringBuilder StringBuilder.append(String)>
        //   10   21:iconst_5        
        //   11   22:invokevirtual   #31  <Method StringBuilder StringBuilder.append(int)>
        //   12   25:invokevirtual   #34  <Method String StringBuilder.toString()>
        //   13   28:astore_2        
        System.out.println(ss);
        //   14   29:getstatic       #38  <Field PrintStream System.out>
        //   15   32:aload_2         
        //   16   33:invokevirtual   #44  <Method void PrintStream.println(String)>
        //   17   36:return          
    }

    从上面的代码很容易看出,虽然在源程序中使用了"+",但在编译时仍然将"+"转换成StringBuilder。因此,我们可以得出结论,在Java中无论使用何种方式进行字符串连接,实际上都使用的是StringBuilder。

    因此,如果在代码中大量使用+拼接字符串,就会创建很多的StringBuilder的对象,必然会使性能降低。所以在需要大量拼接字符串的时候使用StringBuilder代替+。

    注:(StringBuffer是线程安全的,效率略低;StringBuilder线程不安全,效率高,在大部分单线程环境使用StringBuilder会更好。)

 

  • 4、Java中比较两个字符串是否相等要使用equals而不能使用==,==是用于比较两个引用是否是同一个对象。

 

posted on 2019-01-22 21:30  朱*力  阅读(221)  评论(0编辑  收藏  举报

导航