首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java的内存有关问题

2012-04-14 
java的内存问题class Person{String name张三}public class student{public static void main(String

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章

热点排行