------- android培训、java培训、期待与您交流! ----------
先看一下如下代码:
public class Buffer
{
public void swap(StringBuffer a, StringBuffer b)
{
a.append(" more");
b = a;
}
public static void main(String[] args)
{
StringBuffer a = new StringBuffer("One");
StringBuffer b = new StringBuffer("Two");
Buffer buffer = new Buffer();
buffer.swap(a, b);
System.out.println(a+" \n"+b);
}
}
输出是
One more Two
解答:因为Java是值传递,所以b的值不会改变,但是a调用了append方法,所以a的值变为了one more,如果你把a.append(" more");改为a=“One more”试试看。
======================================================================================
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
分享到:
相关推荐
Java中String str=null与String str=""的区别? - `String str=null`:表示`str`变量未指向任何字符串对象。 - `String str=""`:表示`str`变量指向一个空字符串对象。 #### 26. 使用运算符"=="和方法equals()进行...
### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...
7. **字符串处理**:详细解析String类,包括字符串的创建、操作和比较,以及StringBuilder和StringBuffer的使用。 8. **多线程**:介绍线程的概念,讲解如何创建和控制线程,以及同步机制,如synchronized关键字和...
综上所述,黑马程序员Java面试宝典2019最新版本为应聘者提供了一整套全面的Java面试知识点,详细解释了包括面向对象编程、Java基础语法、多态性、异常处理、常用API以及数据类型在内的多个重要领域。通过学习这些...
### 黑马程序员入学Java知识(精华总结) #### 一、Java概述与基础知识 ##### 1、何为编程? 编程是指使用计算机语言来编写指令,这些指令被计算机执行以完成特定任务的过程。通过编程,我们可以控制计算机的行为...
1.2 String、StringBuffer和StringBuilder的区别: - String:由于String类的对象是用final修饰的char数组存储,且被声明为private和final,所以是不可变的。每次对String对象进行改变时,都会生成新的对象并改变...
4. **字符串处理**:掌握String类的基本用法,包括字符串的创建、比较、拼接、查找、替换等操作,以及StringBuilder和StringBuffer类的使用。 5. **异常处理**:理解Java中的异常分类,如检查性异常和运行时异常,...
6. **字符串处理**:学习String类的常用方法,包括字符串拼接、查找、替换、分割等操作,以及StringBuilder和StringBuffer的使用。 7. **输入/输出流**:学习Java I/O流的概念,包括文件操作、字符流和字节流的使用...
### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机能够执行一系列任务的过程。 2. **Java语言概述,历史、特点** - Java是一种广泛...
本文主要参考黑马程序员的Java面试宝典上的内容 我们都知道,在Java中字符串可以用+连接,也可以使用StringBuilder或StringBuffer连接。 String str = abc+xyz; 那么这几种方式由什么区别呢。当然你可能会知道以下...
4. **String、StringBuilder、StringBuffer的区别**: - `String`是不可变的,`StringBuilder`和`StringBuffer`都是可变的字符串。 - `StringBuffer`对方法加了同步锁,适用于多线程环境;`StringBuilder`没有同步...
第三部分“黑马程序员_毕向东_Java基础视频教程第13天-04-String(常见功能-切割和替换).avi”将深入讲解字符串的切割与替换操作。`split()`方法使用正则表达式作为分隔符来切割字符串成多个子字符串,返回一个字符串...
String、StringBuilder和StringBuffer的性能区别在于String对象是不可变的,每次修改都会生成新的对象;StringBuilder在单线程环境下修改字符串时更快,而StringBuffer在多线程环境下线程安全。 六、Java的数据类型...
7. **字符串处理**:理解String类的特性,学习StringBuilder和StringBuffer的区别与使用。 8. **输入输出流**:介绍IO流的概念,学习文件读写,以及字符流和字节流的使用。 9. **集合框架**:了解ArrayList、...
- String是不可变的,而StringBuilder和StringBuffer是可变的字符串。 - 在循环体内,使用StringBuilder或StringBuffer比使用"+"进行字符串连接更高效。 以上这些知识点都是Java程序员在面试中常常遇到的问题,...
【描述】:“这份JAVA笔记详尽记录了黑马程序员线下课程的基础语言部分,涵盖了JAVA编程的核心概念和技术。” 【知识点详解】 1. **JAVA语言基础** - 变量与数据类型:JAVA支持基本数据类型(如int, double, char...
在"黑马程序员_毕向东_Java基础视频教程第06天-09-面向对象(单例设计模式).avi" 这个文件中,毕向东老师可能会详细讲解以下内容: 1. **字符串基础**: - 字符串对象的创建:通过`new String()`或字面量`"abc"`。 ...