下载此文档

解决JAVA的String的传值和传地址问题.doc


文档分类:通信/电子 | 页数:约13页 举报非法文档有奖
1/13
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/13 下载此文档
文档列表 文档介绍
(浪曦分享)解决JAVA的String的传值和传地址问题
关于Java的String类型,可能你会碰到这种情况,将String类型的变量传到一个函数,在这个函数中修改变量的值,但是,实参的值并没有发生改变。

Java中String的传值/传地址问题:
例子引入:
1 ;
2
3 /**
4 * ***@author GDUTtiantian
5 */
6 public class JavaString {
7
8 public static void change(String name){
9 //修改name的值
10 name = "ChangedName";
11 }
12
13
14 public static void main(String[] args) {
15 String name = "GDUTtiantian";
16
17 change(name);
18
19 (name);
20
21 }
22
23 }
运行结果:
1 GDUTtiantian

为什么结果不是"ChangedName"呢?
String类的底层实现是用一个字符数组去实现的,就像Integer类,底层也是对int进行封装[装箱和拆箱]。
看String类的修饰部分(源码):
1 public final class String
2 implements , Comparable<String>, CharSequence {
3 /** The value is used for character storage. */
4 private final char value[];
注意,String类加了final关键字,所以不能被继承。
第4行是字符串底层的存储结构:字符数组。
String的内容不能被动态地修改,因为底层是字符数组实现的,数组的大小是在初始化时决定的;
如果可以修改,新的字符串长度比原来数组大,那么就会造成数组越界。

String和StringBuffer的比较:
1 ;
2
3 /**
4 * ***@author GDUTtiantian
5 *
6 * String, StringBuffer 在传参过程中的哈希值比较
7 */
8 public class JavaString4 {
9
10
11 public static void change(String str) {
12 ("形参的哈希值:" + ());
13
14 str = "newString";//修改了形参的值
15 ("修改后:" + ());
16 }
17
18 public static void change(StringBuffer sb) {
19 ("形参的哈希值:" + ());
20 ("newStringBuffer");//修改了形参的值
21 ("修改后:" + ());
22 }
23
24
25 public static void main(String[] args) {
26 String str = new String("GDUTtiantian");
27 StringBuffer sb = new StringBuffer("tiantian");
28
29 ("修改前:" + ());
30 change(str);
31
32 ("\n----------------------------\n");
33
34 ("修改前:" + ());
35 change(sb);
36 }
37
38 }
运行结果:
1 修改前:-501451264
2 形参的哈希值:-501451264
3 修改后:-595706415
4
5 ----------------

解决JAVA的String的传值和传地址问题 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数13
  • 收藏数0 收藏
  • 顶次数0
  • 上传人840122949
  • 文件大小164 KB
  • 时间2018-11-08