A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了,是比较字符串内容是否相同。
Java堆:
1.程序运行中动态分配内存大小
2.java的垃圾回收器自动回收不再使用的数据
Java栈:
1.栈数据可以共享
2.存在栈中的数据大小与生存期必须是确定的。
3.栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象引用。

String是一个特殊的包装类数据。可以用:
   ------ 第一种:String str = new String("abc");
使用new创建字符串对象的步骤如下,每调用一次就会创建一个新的对象。
1. 首先在堆(不是常量池)中创建一个包含指定内容的字符串对象,并将字符串引用指向该对象。
2. 去字符串常量池中查看,是否有包含该内容的对象。
3. 若有,则将new出来的字符串对象与字符串常量池中内容相同的对象联系起来。
4. 若没有,则在字符串常量池中再创建一个包含该内容的字符串对象,并将堆中的对象与字符串常量池中新创建出来的对象联系起来。
        字符串特殊的内存机制带来的好处,即是:只比较两个字符串联系的常量池中对象是否为同一个即可,不论字符串大小,比较速度一样。
------第二种:String str = "abc";
        1.先在栈中创建一个对String类的对象引用变量str
        2.然后查找堆中常量池里有没有存放"abc"
        3.如果没有,则将"abc"存放进常量池,并令str指向”abc”
4.如果已经有"abc"则直接令str指向“abc”。

特殊情况》》》》》》》
127 以下的整数是相等的
Integer i=100;
        Integer j=100;
        System.out.println(i==j); // 打印 true
        128以上就作为不同对象处理了
Integer i=200;
        Integer j=200;
        System.out.println(i==j); //打印false

评分

参与人数 1黑马币 +8 收起 理由
yufuhong + 8 淡定

查看全部评分

4 个回复

正序浏览
guoyangpeng 来自手机 中级黑马 2015-5-16 17:47:15
报纸
总结很好!
回复 使用道具 举报
很详细,谢谢分享
回复 使用道具 举报
不错 学习了
回复 使用道具 举报
总结的很好,很有用!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马