黑马程序员技术交流社区

标题: java的内存机制 [打印本页]

作者: DoubleUUU    时间: 2015-11-18 22:09
标题: java的内存机制
  1. public class StringDemo{
  2. public static void main(String[] args){
  3. String s1 = "abc";
  4. String s2 = new String("abc" );
  5. System.out.println(s1 == s2);
  6. }
  7. }
复制代码
这个程序运行的结果是False,解释的是S1的对象是存储在常量池中,而S2的对象是存在堆中,为什么这两个对象要存在不同的内存中啊?
还有,大牛能不能科普下java的内存机制?栈、堆、方法区、还有现在这个常量池都分别用来存储什么?


作者: 隔壁马良    时间: 2015-11-19 00:57
java.exe运行时首先是编译成的字节码文件(.class)文件存储在方法区中,当运行到main时就会在栈内生成一个区存放给定的s1,而s2会在new的作用下在堆中开辟空间存放abc,地址值是不一样的
作者: wx_YXxWrUwd    时间: 2015-11-19 01:34
今天刚讲到这些东西 看完回复感觉理解了点
作者: xiao15779706    时间: 2015-11-19 08:35
那个equals是把Object父类中的equals方法重写了,String方法中比较的是字符串是否相同
作者: 曾经的星空    时间: 2015-11-19 12:38
"abc"是存储在堆区的String对象;new String("abc")是在堆区再创建一个对象,其存储"abc"对象在堆区的地址值。个人看法
作者: 刘旭波    时间: 2015-11-19 20:05
S1是一个对象,S2是2个对象,地址值不同,肯定是flase
作者: hbcoding    时间: 2015-11-19 23:30
s1为什么存在常量池中啊,不懂诶,求大神解答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2