String类型参数的传值问题

原创 2007年10月05日 20:18:00

public class TestString
{
public static void link(String a)
  {
  a+="word";
  }
  public static void main(String []args)
  {
  String a="hello";
  link(a);
  System.out.println(a);

  }
}

输出的是 hello ,不是hello word 

:这是个引用数据类型数据传递的问题(相当与我们常说的传引用调用),并非基本数据类型的参数传递(传值调用)。
public static void link(String a) 

  a+="word";         //语句2,把这个参数叫a2


String a="hello";    //语句1,把这个参数叫a1

语句1在执行的时候在堆中产生了一个"hello"对象,然后栈中引用变量指向a1指向"hello",在执行link(a)时将a1传给了a2,此时只是在栈中多了一个a2变量,堆中并没有新产生一个"hello"对象,即a1和a2指向的是同一个"hello",然后执行语句一a+="world";此时在堆中有产生了一个对象"helloworld",并将变量a2指向这个"helloworld",但a1仍然指向"hello",所以最后的打印结果是"hello"。这是由于String类型是一种特殊类型的引用类型,对String进行的任何修改,String都会新产生一个对象,存放修改后的String。可以比较一下下面的代码:

import java.util.*;
public class TestDYong {

public static void main(String[] args) {
StringBuffer str=new StringBuffer().append("hello");
change(str);
System.out.println(str);
}

public static void change(StringBuffer str){
str.append("world");
}

}

由于StringBuffer的append并不产生新的对象(区别与String的+产生新对象),所以上面代码打印的是"helloworld"
String类是final类。

Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?

原理知识: 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的 值不会改变原始的值. 如果参数类...
  • wuya814070935
  • wuya814070935
  • 2015年10月19日 15:39
  • 3637

java之传递String类型的参数

如果你认为arrayPassTest 函数中,s是作为值传递,而ss是作为引用传递,所以有这样的输出结果,也不算错误,但是决对没有真正理解里面的原因。在这里,String 类型的传递是引用传递,也即是...
  • pony_maggie
  • pony_maggie
  • 2015年03月07日 21:51
  • 11752

Mybatis 传参数的问题

1   Mybatis-There is no getter for property named 'tj' in 'class java.lang.String' SELECT   ..   ${...
  • leobig
  • leobig
  • 2013年05月24日 13:31
  • 2099

Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试

这个问题,可能是太简单了。稍微有点经验的,估计都不会犯这个错误。不好意思,过了个年,几条不写代码,生疏了,也就有了下面的bug。 先看代码,你要是一眼就看出问题了,那就请允许在下水那么一回。 publ...
  • qq_27093465
  • qq_27093465
  • 2017年02月15日 15:18
  • 807

java引用类型参数传值的两个很好的例子

java引用类型数据包括数组,接口,等等,当参数是引用类型时,“传值”传递的是变量中存放是“引用”,儿不是变量所引用的实体,下面有两个个很好的例子: 例子1: 首先写一个电池类,和收音机类packa...
  • qq_30070433
  • qq_30070433
  • 2016年08月25日 11:00
  • 1302

对String值不可变的理解以及String类型的引用传递问题

今天复习java时,突然注意到了一句以前没有注意过的一句话,String 是final修饰的,其值是不可变的。当时看的一脸懵逼,String str = "abc"; str = "abcde"这两行...
  • Tomake
  • Tomake
  • 2016年09月08日 20:01
  • 1428

float类型在值传递过程中出现的问题

标签: 头文件float 2013-04-01 14:44 211人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载。 编程中发现floa...
  • mirkerson
  • mirkerson
  • 2016年01月19日 09:34
  • 1132

form传值方法

1、 GET方法 input....GET方法是拼接一个URI,然后直接向服务器请求数据,如果action中也带了参数,则会被忽略。2、POST ...
  • hzz532968708
  • hzz532968708
  • 2016年01月18日 14:35
  • 1306

值类型和引用类型,形参和实参,传值和传引用

C# 中有两种类型:引用类型和值类型。 传值,传引用——多角度论述,力求清晰、准确...
  • ma15732625261
  • ma15732625261
  • 2016年01月28日 19:57
  • 1010

關於JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值

一、 最开始的示例 写代码最重要的就是实践,不经过反复试验而得出的说辞只能说是凭空遐想罢了。所以,在本文中首先以一个简单示例来抛出核心话题:public class StringAsParamOfM...
  • JQ_AK47
  • JQ_AK47
  • 2016年10月03日 15:27
  • 6087
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String类型参数的传值问题
举报原因:
原因补充:

(最多只允许输入30个字)