Java之把String对象作为方法的参数
来源:互联网 发布:windows最新系统 编辑:程序博客网 时间:2024/06/02 02:38
参考自:http://blog.csdn.net/pony_maggie/article/details/44120045
看一段代码:
public class StringTest {public void StringPassTest(String s, String[] ss) {s = "abc";ss[0] = "abc";}public static void main(String[] args) {String s1 = "good";String[] ss = { "edf" };StringTest stringTest = new StringTest();stringTest.StringPassTest(s1, ss);System.out.println(s1 + ss[0]);}}
输出结果:
从输出结果与可以看出:s1的值竟然没改!ss的值改了。
对于函数StringPassTest来说,String 类型的传递是引用传递,也即是地址传递。这个是毋庸置疑的。因为在java里,String是对象类型,作为参数肯定是引用传递。
ss参数完全符合引用传递的特点,很好理解。
下面来看一下String的构造函数实现,版本为jdk1.8:
/** * Initializes a newly created {@code String} object so that it represents * the same sequence of characters as the argument; in other words, the * newly created string is a copy of the argument string. Unless an * explicit copy of {@code original} is needed, use of this constructor is * unnecessary since Strings are immutable. * * @param original * A {@code String} */ public String(String original) { this.value = original.value; this.hash = original.hash; }
this.value为:
/** The value is used for character storage. */ private final char value[];
所以从以上代码可以看出:String内部是用char[]来存储字符串的,String相当于char[]的包装类,在Java中,包装类的特质就是值操作时体现对应的基本类型的特质,这就是为什么会有传值的效果!
这个示例也给我们一个启示:当写一个函数传递数组的时候,不要直接对内部成员进行赋值,否则结果就是不可控的。
比如下面这个函数,如果m_myArray被改了,那么传递的这个数组也会改变,因为是引用传递!
public void setArray(String[] newArray) { this.m_myArray = newArray; }
最好使用下面的方法:
public void setArrayNew(String[] newArray) { if(newArray == null) { this.m_myArray = new String[0]; } else { this.m_myArray = new String[newArray.length]; System.arraycopy(newArray, 0, this.m_myArray, 0, newArray.length); } }
0 0
- Java之把String对象作为方法的参数
- 处理String的split方法把参数作为正则匹配
- 我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑
- iOS基础之OC:对象作为对象方法的参数
- 对象作为方法的参数
- Java语言中,以String作为类型的变量在作为方法参数时所表现出的“非对象”的特性。
- CButtonST的使用之把CButtonST的对象作为函数参数
- java的String类型作为参数传递
- 委托,把方法作为参数
- java之interface--接口作为方法的参数传递
- 对象作为方法的参数连续传递
- 对象作为方法的参数传递
- StringBuilder对象作为方法的参数
- Objective-C - 对象作为方法的参数
- (对象类作为参数的方法)
- (对象类作为参数的方法)
- 委托调用之把代理作为方法的参数并进行动态调用
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- MFC TreeChart用法
- Linux下如何释放cache内存
- DOS命令大全!
- TCP时延问题
- 获取新浪微博数据(1)-使用微博SDK
- Java之把String对象作为方法的参数
- Xcode项目导入CocoaPods管理第三方
- iOS-Block的实现(一)
- 电子之220V有效值峰值峰峰值
- ubuntu操作系统安装(三) 更改软件源
- etmvc+jQuery EasyUI Highcharts实现柱状图
- 多线程Vector
- tcpdump用法
- intelij IDEA 中 Maven 插件错误