日期:2014-05-20  浏览次数:20694 次

java的内存问题
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="王五";
 }
}
 该程序在栈内存或者是在堆内存中存储的

------解决方案--------------------
你想问什么?
------解决方案--------------------
你想要问的是什么 是说这个程序在栈内存存储还是在堆内存存储么?
如果是我说的这个意思 都有 因为有实例对象和应用句柄 两者存储的位置不一样。

------解决方案--------------------
字符串是在的内存的 code segement 吧 str是在栈内存中
------解决方案--------------------
str是在栈内存中
------解决方案--------------------
整个代码在code segment
程序运行时,对象是在堆内存中
局部变量在栈中
字符串常量,静态变量在data segment中
------解决方案--------------------
你是不是在学汇编阿?不过汇编确实蛮重要的,这个有空也得翻翻
------解决方案--------------------
菜鸟来回答:
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
------解决方案--------------------
if you print the value of the str.name,the last value is "王五"!that's all!!


探讨
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);
……

------解决方案--------------------
f923@qq.com
------解决方案--------------------
凡是new的都在堆中
------解决方案--------------------
下载 Java虚拟机规范(Java SE 7).pdf 看2.5,2.6,2.7章