`
xw302
  • 浏览: 121437 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java基础知识汇总

阅读更多
1、数据类型
    * byte: 8-bit, -128 - 127.
    * short: 16-bit, -32,768 - 32,767.
    * int: 32-bit, -2,147,483,648 - 2,147,483,647.
    * long: 64-bit, -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807.
    * float: 32-bit.
    * double: 64-bit.
    * boolean: true/false.
    * char: 16-bit, '\u0000' (or 0) -'\uffff' (or 65,535).
2、String问题汇总
a、比较
String str1 = new String("abc");  
String str2 = "abc";   
String str3 = "abc"; 


System.out.println("str1 == str2:"+(str1 == str2)); 
System.out.println("str1.equals(str2):"+str1.equals(str2));
System.out.println("str2 == str3:"+(str2 == str3)); 
System.out.println("str2.equals(str3):"+str2.equals(str3));

//str1 = str1.intern();//(1)注释掉(2)不注释
String str4 = new String("abc");
System.out.println("str1 == str4:"+(str1 == str4)); 
System.out.println("str1.equals(str4):"+str1.equals(str4));
System.out.println("str1 == str2:"+(str1 == str2));
System.out.println("str1.equals(str2):"+str1.equals(str2));
System.out.println("str1 == str3:"+(str1 == str3)); 
System.out.println("str1.equals(str3):"+str1.equals(str3));	
        
result:
(1)												
str1 == str2:false
str1.equals(str2):true
str2 == str3:true
str2.equals(str3):true
str1 == str4:false
str1.equals(str4):true
str1 == str2:false
str1.equals(str2):true
str1 == str3:false
str1.equals(str3):true

(2)
str1 == str2:false
str1.equals(str2):true
str2 == str3:true
str2.equals(str3):true
str1 == str4:false
str1.equals(str4):true
str1 == str2:true
str1.equals(str2):true
str1 == str3:true
str1.equals(str3):true

原因如下:Java中String的运作方式,必须明确一点:String是一个非可变类(immutable)。
非可变类:简单说来,非可变类的实例是不能被修改的,每个实例中包含的信息都必须在该实例创建的时候就提供出来,并且在对象的整个生存周期内固定不变。
因此
   1.  String str1 = new String("abc");   
   2.  Stirng str2 = "abc"; 
   3.  str1 = str1.intern();
对于第一种,jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。
对于第二种,jvm首先会在内部维护的strings pool中通过String的 equels 方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;如果对象池中没有该String对象,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。
对于第三:使用第一种方法创建对象时,jvm是不会主动把该对象放到strings pool里面的,除非程序调用 String的intern方法。而调用intern方法不管是在Stirng str2 = "abc"之前还是之后,均为相同的引用。

如此上面的问题就得到解决。

b、String 与 StringBuffer
String在做串接的话,要增长字符串,也就是要改变String的内部状态,这样会影响性能。
StringBuffer是可变的配套类,如果经常做串接的话,应该采用StringBuffer,它仅仅时改变了内部数据结构,而不会创建新的对象,因此性能上有很大的提高。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics