`
全能骑士
  • 浏览: 68517 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过String和StringBuilder理解值传递而非引用传递的模糊概念

    博客分类:
  • JAVA
阅读更多
学习c,c++特别是经常看过国内c,c++,java书籍的朋友们肯定知道值传递和引用传递的概念,我们必须知道的就是java中只有值传递,引用(指针)也是一种值,值传递就是将值拷贝一份传入方法的对应的形参中:

首先来看这个代码:

package test;

public class Test {

	
	public static String doString(String str)
	{
		str += "哥" ;
		return str ;
	}
	
	public static StringBuilder doStringBuilder1(StringBuilder str)
	{
		str = new StringBuilder() ;
		str.append("新犀利哥");
		return str ;
	}
	
	public static StringBuilder doStringBuilder2(StringBuilder str)
	{
		str.append("哥") ;
		return str ;
	}
	
	

	public static void main(String[] args) {
		
		String str1 = new String("犀利") ;
		doString(str1) ;
		System.out.println(str1) ;
		
		StringBuilder str2 = new StringBuilder() ;
		str2.append("犀利");
		doStringBuilder1(str2) ;
		System.out.println(str2) ;
		
		StringBuilder str3 = new StringBuilder() ;
		str3.append("犀利");
		doStringBuilder2(str3) ;
		System.out.println(str3) ;
		
		
		

	}


}
//输出结果为:  
"犀利"
"犀利"
"犀利哥"

首先要知道的是JAVA中只有值传递.
注意:经常会听到引用传递的说法,实际上引用传递就是值传递,就是将栈中引用(指针)复制一份传递到方法中


str1变量:
str1是String类型,采用值传递将String类型的引用复制一份传给doString方法的形参,String是继承final,String类型数据是不可以改变的,因此对String的操作实际上是在指向新建的地址空间。方法中的str1的引用只是一个拷贝,因此方法中的操作不会对原来的str1指向的地址空间进行更改:
//输出 "犀利"



str2变量:
str2变量是StringBuilder类型,采用值传递将StringBuilder类型的引用str2复制一份传给doStringBuilder1方法的形参,方法中新建StringBuilder,即拷贝的引用指向了新建的StringBuilder对象地址,对新地址的操作不会改变外部的引用指向的原地址的数据:
//输出 "犀利"

str3变量:
str3变量是StringBuilder类型,采用值传递将StringBuilder类型的引用str2复制一份传给doStringBuilder1方法的形参,方法中对StringBuilder对象进行操作,因为原引用和拷贝的引用都指向同一个StringBuilder对象地址,通过拷贝的引用对地址进行操作意味着改变了原引用所指向的地址的数据:
//输出 "犀利哥"
分享到:
评论

相关推荐

    String StringBuffer和StringBuilder区别之源码解析

    通过上面的分析,我们可以看到,String类的字符串是不可变的,而StringBuffer和StringBuilder类的字符串可以被修改。StringBuffer类是线程安全的,而StringBuilder类不是线程安全的。 在选择字符串类时,我们需要...

    String、StringBuilder和StringBuffer的区别

    在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...

    String和StringBuilder类的区别

    ### String和StringBuilder类的区别 在.NET框架中,`String` 和 `StringBuilder` 是两种非常重要的字符串处理类。尽管它们都能用来表示和操作文本数据,但它们之间存在显著的区别,主要体现在内存使用、性能表现...

    String和StringBuilder效率测试

    在Java编程语言中,`String`和`StringBuilder`都是用于处理字符串的重要类,但它们在处理方式和效率上有显著的区别。本资源中的代码是针对这两种类的效率进行测试的实例,旨在帮助开发者理解它们在不同场景下的性能...

    String、StringBuffer、StringBuilder的使用方法

    在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...

    String及StringBuffer和StringBuilder的区别

    String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。 String String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一...

    Java-Java String和StringBuilder

    在Java编程语言中,String和StringBuilder是两个非常重要的类,它们在处理文本字符串时起着核心作用。了解这两个类的特点和使用场景对于提高程序性能至关重要。 首先,`String`类在Java中是不可变的,这意味着一旦...

    字符串、String类和StringBuilder类

    本文将深入探讨字符串、String类以及StringBuilder类,帮助你更好地理解和应用这些基础知识。 首先,我们关注的是String类。在C#中,String类是不可变的,这意味着一旦一个字符串对象被创建,它的内容就不能被改变...

    跟我学Java-day13-String和StringBuilder.pdf

    day13-String和StringBuilder 1.String类 1.1字符串的比较【理解】 1.1.1==号的作用 比较基本数据类型:比较的是具体的值 比较引用数据类型:比较的是对象地址值 1.1.2equals方法的作用 方法介绍 示例代码 ...

    java值传递和引用传递详解

    Java中的参数传递方式主要有两种:值传递和引用传递。理解这两种机制是编程中至关重要的,因为它们直接影响到函数内部如何改变或操作传入的数据。 **值传递**在Java中是基本数据类型(如int, double, char等)的...

    String ,StringBuffer与StringBuilder

    在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String 对象,就不能修改它的值。每次对 String 对象的...

    String、StringBuilder、StringBuffer 用法比较

    stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...

    测试string的+和String.Format()和StringBuilder.Append()性能差距|TestForString.7z

    在循环或大量拼接场景下,`StringBuilder.Append()`方法的性能显著优于`+`和`String.Format()`。这是因为`StringBuilder`在内存中维护一个缓冲区,直到最后才一次性生成字符串,减少了不必要的内存分配和垃圾回收。 ...

    String类型传递是值传递,char[]类型传递是引用传递的实现

    在Java编程语言中,对象的传递方式有两种:值传递和引用传递。这两种方式在处理不同类型的数据时有不同的表现,尤其体现在String类型和字符数组(char[])上。让我们深入理解这两种传递方式以及它们在Java中的具体实现...

    String、StringBuffer与StringBuilder之间区别

    String:字符串常量  StringBuffer:字符创变量  StringBuilder:字符创变量  从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段...

    C#中String和StringBuilder的简介与区别

    C#中String和StringBuilder的简介与区别 String类型对象的特点: 1.它是引用类型,在堆上分配内存 2.运算时会产生一个新的实例 3.String 对象一旦生成不可改变(Immutable) 4.定义相等运算符(== 和 !=)是为了...

    Tedu一段String和StringBuilder

    根据给定文件的信息,我们可以提炼出以下几个核心知识点: ### 1. Java中的访问控制修饰符 - **Public**: 表示公开,任何类都...通过这种方式,我们可以更深入地理解 `String` 和 `StringBuilder` 的使用场景和区别。

    String和StringBuilder、StringBuffer的区别1

    在Java编程语言中,`String`、`StringBuilder`和`StringBuffer`是处理字符串的三种主要类型,它们各自具有不同的特性和使用场景。下面将详细解释它们之间的主要区别。 首先,`String`类是最基本的字符串类型,它...

    ajax string StringBuilder理论和示例

    在处理大量字符串操作时,使用StringBuilder而非连接操作(如`+`或`concat()`),可以显著降低内存分配和垃圾回收的开销,因为连接操作每次都会创建新的字符串对象。 综上所述,Ajax技术提升了Web应用的交互性,而...

Global site tag (gtag.js) - Google Analytics