package Test01;
public class test03
{
public static void stringUpd(String str) {
str = str.replace("j", "l");
System.out.println(str);
}
public static void stringBufferUpd(StringBuffer bf) {
bf.append("c");
System.out.println(bf);
}
public static void main(String[] args) {
/**
* 對於基本類型和字符串(特殊)是傳值
* 对于字符串,一旦定义,不能更改
* (1)定义方式之一:String s1 = "java";
* java放在字符常量池中
* 因为字符串不能更改,所以传递参数时,是传值(传副本)
*
*
* (2)定义方式之二:String s2 = new String("java");
* 先检查字符常量池中是否有java字符串,如果有,String s2=new String("java"),
* 然后new String()又在堆中分配了内存空间,将常量区中的“java"复制一份给了堆中的String对象。
*
*
* 先检查字符常量池中是否有java字符串,如果没有
* String s2=new String("java"),此时先是在String常量池中产生了一个“java”对象,
* 然后new String()又在堆中分配了内存空间,将常量区中的“java"复制一份给了堆中的String对象。
* 因此这段代码产生了两个对象,一个在常量区、一个在堆区。
*
* 輸出lava,java
*/
String s1 = "java";
stringUpd(s1);
System.out.println(s1);
System.out.println("-----------------------------");
String s2 = new String("java");
stringUpd(s2);
System.out.println(s2);
System.out.println("-----------------------------");
/**
* 對於對象而言,傳的是引用,而引用指向的是同一個對象
*
* 輸出javac,javac
*/
StringBuffer bb = new StringBuffer("java");
stringBufferUpd(bb);
System.out.println(bb);
}
}
/*
输出
lava
java
-----------------------------
lava
java
-----------------------------
javac
javac
*/
java字符串传值问题
最新推荐文章于 2023-11-18 19:23:13 发布