请问String的值是如何变化的,求详细回答谢谢。

Aduroidpc 2015-04-29 04:59:14
import java.util.Arrays;
public class TestPerson {

public static void main(String[] args) {
Person p = new Person();

String str = "good night!";
char [] ch = {'a','b','c'};

p.change(str, ch);
System.out.println("str="+str);
System.out.println(Arrays.toString(ch));
}
}
public class Person {
public void change(String str,char [] ch){

str = "good morning!";
ch[1] = 'm';
}
}
...全文
282 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-05-01
  • 打赏
  • 举报
回复
其实很简单,java只有值传递,传入的是其副本。 引用str的副本str1,其指向的对象在方法里面改变(即和str指向不同的对象了),方法主体结束后str1消失,而str依旧没改变。 数组引用ch的副本ch1,其指向的对象未改变(和ch同时指向同一个对象),所以其所指对象属性可以被改变,方法主体结束后ch1依然消失。
star2013yk 2015-04-30
  • 打赏
  • 举报
回复
你还是先去搞清楚string和stringbuffer都是什么吧
yynotih 2015-04-30
  • 打赏
  • 举报
回复
str不能被另外赋值
JPF1024 2015-04-29
  • 打赏
  • 举报
回复
新增的那个方法可以实现你想要的效果.


/**
 * <p>
 * <p>
 * Created by puruidong on 2015/4/29.
 */


class Person {


    public void change(String str, char[] ch) {
        System.out.println("change >1 :"+str);
        str = "good morning!";
        System.out.println("change >2 :"+str);
        ch[1] = 'm';
    }


    // new add
    public void changeStrBuffer(StringBuffer sur){
        sur.delete(0,sur.length());
        sur.append("good morning!");
    }
}


public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        String str = "good night!";
        StringBuffer strbuf = new StringBuffer(str);
        char[] ch = {'a', 'b', 'c'};
        p.change(str, ch);
        p.changeStrBuffer(strbuf);//new add
        System.out.println("str=" + str+">> strbuf="+strbuf.toString());// new add
        System.out.println(Arrays.toString(ch));

    }
}
JPF1024 2015-04-29
  • 打赏
  • 举报
回复
下面的内容来自java 1.6 api文档,关于String类的官方描述: String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如: String str = "abc"; 等效于: char data[] = {'a', 'b', 'c'}; String str = new String(data); 下面给出了一些如何使用字符串的更多示例: System.out.println("abc"); String cde = "cde"; System.out.println("abc" + cde); String c = "abc".substring(2,3); String d = cde.substring(1, 2); String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。大小写映射基于 Character 类指定的 Unicode 标准版。 Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。有关字符串串联和转换的更多信息,请参阅 Gosling、Joy 和 Steele 合著的 The Java Language Specification。 除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出 NullPointerException。 String 表示一个 UTF-16 格式的字符串,其中的增补字符 由代理项对 表示(有关详细信息,请参阅 Character 类中的 Unicode 字符表示形式)。索引值是指 char 代码单元,因此增补字符在 String 中占用两个位置。 String 类提供处理 Unicode 代码点(即字符)和 Unicode 代码单元(即 char 值)的方法。
JAVA小皇帝 2015-04-29
  • 打赏
  • 举报
回复
你的代码有错误,一个.java文件中可以有多个类但是只能有一个publicclass类 修改后的结果为:str=good night! [a, m, c]
JAVA小皇帝 2015-04-29
  • 打赏
  • 举报
回复
你的代码有错误,一个.java文件中可以有多个类但是只能有一个publicclass类

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧