java:String

需要同步用StringBuffer,不需要的时候用StringBuilder更快。

String S1 = “This is only a” + “ simple” + “ test”;
相当于String str = "A"+"B"+"C"+"D";
在串池中产生了"AB","ABC"这两个多余的对象,浪费空间.

可以说对于需要频繁变化的字符串,StringBuffer是最佳选择。

String str = "A"+"B"+"C";
这种代码,在编译阶段就会被处理了。
String str = "A"+"B"+"C"; 和 String str = "ABC";
本质上是一样的

1.  在执行速度方面的比较:StringBuilder >  StringBuffer  
2.  StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
3.  StringBuilder:线程非安全的
  StringBuffer:线程安全
    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结:1.如果要操作少量的数据用 = String
                    2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
                    3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

时间: 2024-11-04 21:58:39

java:String的相关文章

Java:String、StringBuffer和StringBuilder的区别

Java:String.StringBuffer和StringBuilder的区别 1 String String:字符串常量,字符串长度不可变.Java中String是immutable(不可变)的. String类的包含如下定义: [java] view plain copy /** The value is used for character storage. */ private final char value[]; /** The offset is the first index

Java:String和Date、Timestamp之间的转换

一.String与Date(java.util.Date)互转 1.1 String -> Date Java代码   String dateStr = "2010/05/04 12:34:23"; Date date = new Date(); //注意format的格式要与日期String的格式相匹配 DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); try { date = sdf

java:String使用equals和==比较的区别

"=="操作符的作用 1.用于基本数据类型的比较 2.判断引用是否指向堆内存的同一块地址. equals所在位置: 在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写 public boolean equals(Object obj) { return (this == obj); } equals的作用: 用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型 equals的基本使用: boolean

Java:String转换为date类型

public static Date stringToDate(String str) { DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { // Fri Feb 24 00:00:00 CST 2012 date = format.parse(str); } catch (ParseException e) { e.printStackTrace(); } // 2012-0

java:String类hashCode()的实现

一个对象只有一个hashcode,多个对象的hashcode可能相同. 源代码位置:java-source/java/lang/String.java,hashCode()方法: public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i

java:String不是基本类型,不是数组,是类,而数组也是类

环境:jdk 1.7. 本文可以用一句话总结:**String不是基本类型,不是数组,是类,而数组也是类.** 由于脚本语言使用较多,我在java中也写过这样的代码: String str = "hi"; System.out.println(str[1]); // 错误的 可惜是错的.str是java.lang.String类的一个对象,无法使用 []运算符.真正可用的代码是这样的: String str = "hi"; System.out.println(st

深入理解Java:String(转)

在讲解String之前,我们先了解一下Java的内存结构. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两种类型内存:堆和非堆,堆内存(Heap Memory)是在 Java 虚拟机启动时创建,非堆内存(Non-heap Memory)是在JVM堆之外的内存. 简单来说,非堆包含方法区.JVM内部处理或优化所需的内存(如 JITCompiler,Just-in-time Compiler,即时编译后的代

【转】Java:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变.Java中String是immutable(不可变)的. String类的包含如下定义: [java] view plaincopy /** The value is used for character storage. */ private final char value[]; /** The offset is the first index of the storage that is used. */ private fi

深入理解Java:String

在讲解String之前,我们先了解一下Java的内存结构. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两种类型内存:堆和非堆,堆内存(Heap Memory)是在 Java 虚拟机启动时创建,非堆内存(Non-heap Memory)是在JVM堆之外的内存. 简单来说,堆是Java代码可及的内存,留给开发人员使用的:非堆是JVM留给自己用的,包含方法区.JVM内部处理或优化所需的内存(如 JITCom

java:string和常量池

刚刚写了段代码,内容如下: public class LearnHashCode { public static void main(String[] args) { String s1 = "ABC"; String s2 = "ABC"; System.out.println(s1==s2); //true System.out.println(s1.equals(s2)); //true System.out.println(s1.hashCode()); /