有很多初学者对string和stringbuffer的问题纠缠不清,不知道什么时候用string什么时候用stringbuffer,无法区别他们的用法,其实根本的原因是他们没有弄清楚这两者的内部的机制以及如何的运作。
public class StringTest {
public static void stringReplace (String text) {
text = text.replace('j' , 'i');
}
public static void bufferReplace (StringBuffer text) {
text = text.append("C");
}
public static void main (String args[]) {
String textString = new String ("java");
StringBuffer textBuffer = new StringBuffer ("java");
stringReplace (textString);
bufferReplace (textBuffer);
System.out.println (textString + textBuffer);
}
}
答案是 javajavaC
String是个不可变类,stringbuffer是个可变的类。String的方法都不会改变它本身,改变的是它的引用,指向不同的内存地址;而stringbuffer会改变缓冲区内的字符串内容。
String覆盖了Object类的equals()方法,而stringbuffer没有覆盖了Object类的equals()方法,所以会有一下的结果:
StringBuffer str1 = new StringBuffer("lgl669");
StringBuffer str2 = new StringBuffer("lgl669");
str1.equals(str2)//为什么是false
String str1 = new String("lgl669");
String str2 = new String("lgl669");
str1.equals(str2)//为什么是true
因为没有覆盖equals()方法,StringBuffer 调用Object中的equals()方法,根据引用(地址)进行比较,所以为false;String 重写了equals() 方法,根据值进行比较,所以为true。
分享到:
相关推荐
### 标题和描述解读:“String容量大小区分” 该标题及描述强调了在Java编程中,对String类型数据容量的理解和掌握。字符串在程序设计中极为常见,尤其是在处理文本文件时更是不可或缺。Java中String对象具有不可...
### Java源码解读之String类详解 #### 一、引言 在Java开发过程中,`String`类无疑是最常用的数据类型之一。它不仅在日常编码中频繁出现,也是面试中的热门话题。本文将深入探讨`String`类的核心实现机制及其重要...
1.2 String、StringBuffer和StringBuilder的区别: - String:由于String类的对象是用final修饰的char数组存储,且被声明为private和final,所以是不可变的。每次对String对象进行改变时,都会生成新的对象并改变...
四、String和StringBuffer的区别 String类提供了数值不可改变的字符串,而StringBuffer类提供的字符串可以进行修改。 五、运行时异常与一般异常 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示...
下面是对该资源的详细解读和知识点总结: Java 基础 1. JDK 和 JRE 的区别:JDK(Java Development Kit)是 Java 开发工具包,提供了 Java 开发所需的所有工具和库;JRE(Java Runtime Environment)是 Java 运行...
本文将详细解读`String`类中的一些常用方法及其应用场景,帮助读者更好地理解和运用这些功能。 #### `substring()` `substring()` 方法用于提取字符串的一部分。 - **语法**: - `String substring(int startIndex...
如果`hibernate.jdbc.use_scrollable_resultset`配置为`true`,则Hibernate会尝试使用JDBC的`ResultSet`接口提供的`absolute`方法直接跳转到指定的位置,从而实现快速定位和分页。 ```java if (session.getFactory...
4. String与StringBuffer的区别:这是Java编程中的一个基础知识点,String表示不可变的字符串,而StringBuffer是可变的,适合进行频繁的字符串操作,因此在效率上,StringBuffer优于String。 5. 控制流结构:试题...
- String与StringBuffer的区别:了解String不可变和StringBuffer可变的特性及其性能差异。 - Vector, ArrayList, LinkedList的区别:熟悉这三种集合框架在内部实现和使用场合上的不同。 - HashTable, HashMap, ...
String和StringBuffer的区别在于前者是不可变的,后者是可变的,因此StringBuffer在处理大量字符串时更加高效。字符串与数组之间的转换常见方法包括使用split()和Arrays.asList()等。 数组具有length属性,可以获取...
下面是对该资源的详细解读和分析: 一、Java基础知识 1.1 面向对象的特征 面向对象编程(Object-Oriented Programming,OOP)是Java的基础,它的四大特征是封装、继承、多态和抽象。封装是指对数据和方法的封装,...
在字符串操作方面,String、StringBuffer和StringBuilder的区别是面试时经常被问到的问题。String是不可变的字符串,每次修改都会生成新的字符串对象。StringBuffer和StringBuilder则是可以修改内容的字符串缓冲区。...
String vs StringBuffer vs StringBuilder - **String**:不可变字符串,适用于字符串不变的情况。 - **StringBuffer**:线程安全的可变字符串,适用于多线程环境下的字符串操作。 - **StringBuilder**:非线程安全...
String和StringBuffer的区别在于String对象是不可变的,每次操作都会生成新的String对象。而StringBuffer是可变的,可以在原有对象上进行修改。 异常分为运行时异常和一般异常。运行时异常是不必须显示捕获和声明的...
- **String、StringBuffer、StringBuilder**:在Java中,String是不可变的,每次修改都会创建新对象;StringBuilder和StringBuffer是可变的,适合在多线程环境中进行字符串拼接,后者提供线程安全。 除了这些基础...
- 这种设计保证了 `String` 对象的安全性和效率,尤其是在多线程环境中。 ### 18. 字符串常量池的理解 - 字符串常量池是Java虚拟机用来优化字符串处理的一种机制。 - 当两个字符串字面量相等时,它们指向同一个...
String、StringBuilder、StringBuffer三者的区别主要在于线程安全和性能,String是不可变的,而StringBuilder和StringBuffer是可变的,但StringBuffer线程安全;数据类型之间的转换分为隐式和显式转换。 8. Java的...
例如,了解Object类提供的基本方法、String和StringBuffer的区别、集合框架中不同类的使用场景和特性、以及HashMap和ConcurrentHashMap的区别。另外,对Java中的同步机制、锁的使用以及对于“==”和“equals”方法的...
- StringBuffer是可变的,String是不可变的。 - 数组有length属性,String通过length()方法获取长度。 ### 高级Java部分 - 异常处理:Java采用try-catch-finally机制处理运行时异常和检查型异常。 - 多线程编程:...