文档章节

String 和StringBuffer 在传递过程中的区别

刘付kin
 刘付kin
发布于 2016/12/07 11:02
字数 565
阅读 2
收藏 0
点赞 0
评论 0

#1:看下面一段程序,对比区别:

public class StringTest {
	public static void main(String[] args) {
		String aString = "helloword";
		String bString = "helloword";
		aString = aString.replace('h', 'd');
		aString = aString.replace('l', 'b');
		System.out.println(aString);
		//经过jdk编译优化后,使得astring 和 bstring 都是指向了同一个内存空间。
		System.out.println(aString == bString);
		
		String aString2 = new String(aString);
		String bString2 = new String(bString);
		//由于是new的形式,所以在内存中是不可能为同一个对象的,也就是地址不可能相同,
		//aString2 == bString2比较的是地址引用,所以不相等
		//aString2.equals(bString2)比较的是值,所以值相等。
		System.out.println(aString2 == bString2);
		System.out.println(aString2.equals(bString2));
		
		StringBuffer aStringBuffer = new StringBuffer("helloword");
		StringBuffer bStringBuffer = new StringBuffer("helloword");
		//由于是new的形式,所以在内存中是不可能为同一个对象的,也就是地址不可能相同,
		
		//aStringBuffer == bStringBuffer比较的是地址引用,所以不相等
		System.out.println(aStringBuffer == bStringBuffer);
		//aString2.equals(bString2)也是不相等,情况不明。
		System.out.println(aStringBuffer.equals(bStringBuffer));
		//转化为字符串后在进行比较就可以了。
		System.out.println(aStringBuffer.toString().equals(bStringBuffer.toString()));
		
		
		appengd(aStringBuffer, bStringBuffer);
		System.out.println(aStringBuffer  + "  " + bStringBuffer);
	}
	
	public static void changeForString(String a,String b){
		//由于String的值一旦被初始化就不能够改变,只能够重新分配内存空间来生成另一个对象
		//因而a = a+b;这句话的意思是:将a、b的值连接起来生成一个新的对象"ab",再让a指向它,但是原先的aString对象还是只想原来的对象“helloWord”
		a = a.concat(b);
		b=a;
	}
	
	public static void appengd(StringBuffer a,StringBuffer b){
		//StringBuffer是能够改变自身的值得,所以这会改变原有的值,而不是另外生成一个对象,
		//又由于a和aStringBuffer都指向了同一个对象,所以aStringBuffer的值也改变了
		a.append(b);
		//当前b指向了和a、aStringBuffer一样的对象,但是原本的bStringBuffer指向的对象并没有变化
		b = a;
	}
}

总结:String 和 StringBuffer 都是引用传递,形参和实参都是指向同一个对象。

但是由于String的值一旦被初始化就不能够改变,只能够重新分配内存空间来生成另一个对象。所以形参怎么改变都不会影响到实参的值

而StringBuffer的值是可以改变的,形参的值改变也会影响实参的值。

© 著作权归作者所有

共有 人打赏支持
刘付kin
粉丝 6
博文 100
码字总数 72832
作品 0
深圳
Java字符串的String、StringBuilder、StringBuffer三者特性详解

一、不可变String类型 字符串是计算机程序设计中的,最常见行为,Java的字符串操作最主要的类是String,并且String对象是不可变的(Immutable),即对象一旦创建在内存中,那么它的内容就不再...

断桥残雪断桥残雪
2015/08/12
0
0
java-----string stringbuffer stringwriter

string 是Java参数传递(by value)造成的,是不可变的(immutable).,例如 基本类型,String传值,复制了值传递过去;可变的(Object)传值,复制了引用传递过去。 String a = "a";//假设a指向地...

风林火山
2011/01/10
0
0
Java常见面试题及答案1-10

1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。 Java 被设...

t4i2b10x4c22nf6a
2017/12/18
0
0
StringBuilder与StringBuffer的比较

很多人对String和StringBuffer的区别已经很了解了吧,可能还有人对这两个类的工作原理有些不清楚的地方,复习一下吧,顺便牵出J2SE 5.0里面带来的一个新的字符操作的类StringBuilder。那么这...

Koon.LY
2012/05/14
0
0
String StringBuffer StringBuilder

StringBuffer类是线程安全的,在实现的时候会有大量的代码来处理同步, 如果程序只是单线程的,这样会大大的降低执行的效率。这种情况下面应该考虑使用StringBuilder,它和StringBufer的方法...

的书法上的
2014/07/08
0
0
(转)StringBuilder与StringBuffer和String 的区别

很多人对String和StringBuffer的区别已经很了解了吧,可能还有人对这两个类的工作原理有些不清楚的地方,复习一下吧,顺便牵出J2SE 5.0(文档)里面带来的一个新的字符操作的类StringBuilder...

王振威
2012/03/08
0
1
关于String,StringBuffer,StringBuilder的区别

实际开发过程中,一直使用String,对于StringBuffer,StringBuilder了解甚少,偶尔遇到这个问题,上网找了找,这里做下记录。 String是final类型,不能被继承,一旦创建了,就不能被修改,而我...

潘-C
2016/03/08
71
2
你必须搞清楚的String,StringBuilder,StringBuffer

String,StringBuilder 以及 StringBuffer 这三个类的关系与区别一直是 Java 的经典问题,这次就来讲一下关于这三个类的一些知识 一. 简单对比 String : 字符常量 StringBuilder : 字符变量...

Howie_Y
昨天
0
0
java基础---浅谈Java中的String、StringBuilder以及StringBuffer

浅谈Java中的String、StringBuilder以及StringBuffer 一.你了解String类吗? 想要了解一个类,最好的办法就是看这个类的实现源代码,String类的实现在 jdkxxxxxxsrcjavalangString.java 文件...

android-key
2016/12/11
11
0
Java参数是传值还是传引用

Java参数传值还是传引用  参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参...

小和尚敲代码
2016/02/27
91
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell及python脚本方式登录服务器

一、问题 在工作过程中,经常会遇见需要登录服务器,并且因为安全的原因,需要使用交互的方式登录,而且shell、python在工作中也经常用到,并且可以提供交互的功能。都是利用了expect、spawn...

yangjianzhou
10分钟前
0
0
upstream sent too big header while reading...

nginx 报错:1736 upstream sent too big header while reading response header from upstream 1. 一般处理 location ~ \.php$ { #增加下面两句 fastcgi_buffer_size 128k; ......

dubox
21分钟前
0
0
Python解析配置文件模块:ConfigPhaser

import configparser as pa# [SectionA]# a = aa# b = bb# c = cc# [SectionB]# optionint = 1# optionfloat = 1.1# optionstring = string#https://www.cnblogs.com/a......

易野
27分钟前
0
0
Java基础——面向对象

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Object的方法: clone() Object 克隆 to Strin...

凯哥学堂
29分钟前
0
0
rabbitmq学习记录(八)消息发布确认机制

RabbitMQ服务器崩了导致的消息数据丢失,已经持久化的消息数据我们可以通过消息持久化来预防。但是,如果消息从生产者发送到vhosts过程中出现了问题,持久化消息数据的方案就无效了。 Rabbit...

人觉非常君
33分钟前
0
0
毕业5年,我是怎么成为年薪30W的运维工程师

#转载# 我在大学读的是计算机专业,但大学毕业之后,进入到一家私企进行工作,工作的内容类似于网管,会经常的去修电脑,去做水晶头等内容。刚开始工作,也没想太多,最想的是丰富自己的工作...

Py爱好
40分钟前
1
0
大数据基础知识,大数据学习,涉及的知识点

一、什么是大数据 一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流 转、多样的数据类型和价值密度低四大特征。...

董黎明
56分钟前
0
0
Linux CentOS 7上安装极点五笔

话说几天前在新买的惠普笔记本上成功地安装了Linux CentOS 7操作系统、Nvidia Quandro P600驱动程序及X Window,并在VMware下安装Red Hat教学环境,彻底跳出Windows的苦海,但仍然有一件事不...

大别阿郎
今天
17
0
2018年7月20日集群课程

一、集群介绍 集群,简单地说是指一组(若干个)相互独立的计算机,利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。 ...

人在艹木中
今天
0
0
spark开发机中调试snappy

目的 在Idea中的点击运行,使spark可以直接读取snappy 自己编译hadoop,以支持snappy的压缩。 自己编译的目的就是要得到支持snappy文件读写的动态链接库。如果可以在网上下载,可以跳过自行编...

benny周
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部