`
暗黑小菠萝
  • 浏览: 45943 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

java String StringBuilder StringBuffer 以及各种赋值和注意

    博客分类:
  • Java
阅读更多

一、String的综述和各种赋值区别
综述:str只是一个String对象的引用,并不是String对象本身。
引用是4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象。


1.String str = null;
未分配存储空间,表示str不指向任何字符串对象,空引用
null代表声明了一个空对象,对空对象做任何操作都不行的,除了=和==

2.String str;
分配了一个内存空间,没存入任何对象,未初始化的引用
在方法中定义:直接使用时编译是不通过的,必须赋初值
在类中定义(static 静态变量):可以不赋初值直接引用,默认赋值为null

3.String str = "";
分配存储空间,表示str指向一个长度为0的字符串对象
""代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。

4.String str = "a";与String str = new String("a");区别
前者是在字符串池里写入一个字符'a',然后用str指向它
后者是在堆上创建一个内容为"a"的字符串对象。
//变量a和b将会指向同一内存地址(""的地址)
String a = "";
String b = "";
if(a == b){
	System.out.println("a和b地址相等"+true);
}
if(a.equals(b)){
	System.out.println("a和b值相等"+true);
}
//变量c和d不会指向同一地址,而是两个""内容的地址
String c = new String("");
String d = new String("");
if(c==d){
	System.out.println("c和d地址相等"+true);
}
if(c.equals(d)){
	System.out.println("c和d值相等"+true);
}

变量a,b方式:先去字符串池中查找字符串是否已经存在,如果在就直接指向该地址,如果不在生成一个实例放入池中再指向该地址。
变量c,d方式:通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的
所以:a,b方式性能更高。

5.str.equals("abc")和"abc".equals(str)
推荐种写法,可以省略掉对null的判断。
String str = null;
if(str.equals("abc"))//空指针异常java.lang.NullPointerException

if("abc".equals(str))//可以正常运行

6.如何判断字符串是否为空:
if(str != null && str != "")
顺序最好不要写反:
String str = null;
if(str != "" && str != null)//抛出空指针异java.lang.NullPointerException

7.判断字符串是否相等
== : 是判断 str 的地址是否相等。
equals : 是判读 str 指向的对象值是否相等。

二、String、StringBuilder、StringBuffer
1.String
前面说了:
String str = "abc";
str只是一个字符串对象"abc"的引用,存储的是"abc"在内存中存放的地址。
str = "def";时
内存空间重新创建新对象"def",引用str重新指向新对象,实际内存中"abc"的值并未改变。
对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象
javac对String的实现机制也是通过JavaBuilder来实现的。

2.StringBuilder
//无参数的构造方法
StringBuilder sb = new StringBuilder();
//源码:
public StringBuffer() {
        super(16);
    }
//super(16);源码:
char[] value;
AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

新建StringBuilder()对象时候,默认是构建一个大小为16字节的字符数组char[],StringBuilder预先开辟了空间,append的时候只是向内存地址赋值。如果长度不够时候再重新开辟内存。

3.StringBufffer
StringBuffer与StringBuilder基本类似。
StringBuilder和StringBuffer类拥有的成员属性以及成员方法基本相同,区别是StringBuffer类的成员方法前面多了一个关键字:synchronized。
=>StringBuffer是线程安全的。

4.三者性能
对于几个字符串的拼接,基本差不多。
大量数据:StringBuilder > StringBuffer > String

http://www.cnblogs.com/dolphin0520/p/3778589.html
这个文章里面的面试题可以参考下
基本就这些,后续再补充吧。
0
2
分享到:
评论

相关推荐

    你知道String、StringBuffer和StringBuilder的区别吗

    目录StringStringBuffer与StringBuilder总结 String ...StringBuffer与StringBuilder 这两者基本相似,都是可变字符串对象,主要区别为线程是否安全。 总结 最后,引用菜鸟教程下的总结以及相关评论: S

    AIC的Java课程1-6章

     能够使用String,StringBuffer,StringBuilder类创建字符串对象和使用其方法,分辨不同类之间的区别。  能够使用Date, Calendar, Locale, DateFormat,NumberFormat类创建、改变和显示日期、数字和货币...

    java面试宝典

    24、String, StringBuffer StringBuilder 的区别。 10 25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 10 27、描述一下JVM 加载class 文件的原理机制? 10 28、char 型变量中能不能...

    java开发面试题及答案

    Q1:简单说说Java有哪些数据类型 答:①分为基本数据类型和引用数据类型。②基本数据类型包括:数值型(byte、short、int、long、float、double),字符型(char)以及布尔型(boolean)。除了基本类型外,其他数据...

    java基础案例与开发详解案例源码全

    2.4 Java类库组织结构和文档27 2.5 Java虚拟机简介28 2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32 3.1.3 变量的声明和赋值33 3.1.4 变量应用实例33...

    疯狂JAVA讲义

    9.3.2 String、StringBuffer和StringBuilder类 322 9.3.3 Math类 327 9.3.4 Random类 328 9.3.5 BigDecimal类 330 9.4 处理日期的类 333 9.4.1 Date类 333 9.4.2 Calendar类 334 9.4.3 TimeZone类 337 9.5 ...

    千方百计笔试题大全

    24、String, StringBuffer StringBuilder 的区别。 10 25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 10 27、描述一下JVM 加载class 文件的原理机制? 10 28、char 型变量中能不能...

    Java学习笔记-个人整理的

    {3.7}StringBuilder与StringBuffer的缺点}{76}{section.3.7} {3.8}内部类}{77}{section.3.8} {4}Collection}{80}{chapter.4} {4.1}\ttfamily java.util.ArrayList}{80}{section.4.1} {4.2}\ttfamily java.util....

    javaSE代码实例

    13.3.2 编写方法链以及StringBuffer类的重要方法 255 13.4 StringBuilder类 258 13.5 正则表达式 259 13.5.1 正则表达式的基本语法 259 13.5.2 Pattern类简介 262 13.5.3 Matcher类简介 263 13.5.4 ...

Global site tag (gtag.js) - Google Analytics