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类型和集合类型作为函数参数时传值问题的测试

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

String类型传值问题

先看一个小例子,在你上机运行之前,你会觉得输出结果是什么呢? 再看下面的另一个小例子,你又会觉得该输出什么样的结果呢? 刚看到这个问题的时候,我的答案来回动摇,不确定到底该输出怎样的结果。...

java中的String 类型易错点总结(相等比较和传值问题)

---------------------- android培训、java培训、期待与您交流! ---------------------- 毕老师视频看了一个月了,发现前面的东西很容易忘记。Jav...

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

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

Java中String类型的参数传递问题的解析

一、引入示例   Java代码   "font-size: small;">public class StringAsParamOfMethodDemo {      ...
  • lisaem
  • lisaem
  • 2016年07月01日 11:00
  • 295

Java-String类型的参数传递问题

刚才看见一个兄弟在为Java的String传值/传引用问题困惑,翻箱倒柜找到了这篇我很久以前写的文章,发在这里,希望能对迷惑的朋友有些帮助。 提要:本文从实现原理的角度上阐述和剖析了:在J...

[Java]String类型的参数传递问题

最近在练习写一个大整数类,在String作为参数进行传递时遇到了一点问题,下面这篇文章写的非常有帮助,容易理解,拿来参考下。 本文出自 “Hyper Mind” 博客,请务必保留此出处http:...

String和StringBuffer类型数据进行参数传递问题

1.String和StringBuffer做为形参传递 通常参数传递有两种:                 基本类型:不会影响实际参数的值                 引用类型:会影响实际参数的...

Python函数参数传值问题

我想,这个标题或许是很多初学者的问题。尤其是像我这样的对C/C++比较熟悉,刚刚进入python殿堂的朋友们 。C/C++的函数参数的传递方式根深蒂固的影响这我们的思维–引用?传值?究竟是那种呢。 ...

表单用serialize()序列化并且通过ajax向后台传值,后台方法参数传递问题

首先是页面 此页面时一个表单 只要是选中的数据,就往后台传,没选中但是有数据,则不传递。此页面的代码如下 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String类型参数的传值问题
举报原因:
原因补充:

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