class Person
{
 String name="张三";
}
public class student
{
 public static void main(String args[])
 {
  Person str=new Person();
  str.name="李四";
  func(str);
  System.out.print(str.name);
 }
 public static void func(Person a)
 {
  a.name="王五";
 }
}
 该程序在栈内存或者是在堆内存中存储的

解决方案 »

  1.   

    字符串是在的内存的   code segement  吧   str是在栈内存中   
      

  2.   

    整个代码在code segment
    程序运行时,对象是在堆内存中
    局部变量在栈中
    字符串常量,静态变量在data segment中
      

  3.   

    菜鸟来回答:
    class Person
    {
     String name="张三";
    }
    public class student
    {
     public static void main(String args[])
     {
      Person str=new Person();//stack 出现person的引用,heap中被new 出一个person对象,该引用指向对象
     
     str.name="李四";//data 中被new 出一个 String 对象  "李四",str 中的一个name指针,指向该String对象
     
     func(str);//stack 中出现形参str ,将实参str的引用copy给形参
    //方法结束,stack中形参的内存被释放
    //因实参str的引用copy给形参,新建立的形参对象与实参对象指向同一个内存空间,func因而可对内存中的对象进行修改
    //参数传递永远是复制,但复制数值与复制引用(地址,指针)结果是【完全不同的】
      System.out.print(str.name);
     }不懂你想问的是不是这个
    别外程序代码存于 code
      

  4.   

    if you print the value of the str.name,the last value is "王五"!that's all!!
      

  5.   

    下载 Java虚拟机规范(Java SE 7).pdf  看2.5,2.6,2.7章