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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邹颖 初级黑马   /  2012-6-18 23:23  /  1738 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邹颖 于 2012-6-19 19:58 编辑

1.String a1="B";
  String a2= new String("B");
        
        为什么s1 equals s2?
  
a1是被创建的时候放在字符串常量池中  ,a2是新创建的,在堆内存中,两个字符串在内存中的存放
位置不同,虽然值是相同的,但是结果s1.equals s2很是然我不能理解..

2.局部变量的内存中的存放位置.
    看老师视频是说局部变量是存放在栈内存中的,  其中下面的代码, run()存放于方法区的,那里面的局部变量int num 是存放在那的呢?
class  Student{
      
      public void run(){
        int num=10;
    }
}

public  static void main(){}……

另:  吐槽一下,  拿分很不容易,回答了的问题不是没有别人回答的好就是回答的在后面, 我有时候很是佩服那些如教科书版回答题目的人怎么还进不了黑马,让我们这些凡夫俗子只能是对黑马望尘莫及...

建议;管理员和版主在加技术分的时候也应该看看后面人的回答,如果回答的好,或者有道理也应该加点分

评分

参与人数 1黑马币 +20 收起 理由
黄奕豪 + 20 这个真有看后面的,看到好的也给分~~.

查看全部评分

7 个回复

倒序浏览
1,equals 是比较两个值的大小,而且在不重写的情况下是比较两个值内容是否相等;
2,方法中的局部变量也是存放在栈内存中的,当方法运行完之后,局部变量在栈内存中的空间也就被释放了。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1.String a1="B";
String a2= new String("B");

这里的equals其实是调用String类中复写Object后的equals方法,比较的是字符串是否相同,所以返回true。

2.说局部变量是存放在栈内存中,当方法运行完毕后,栈内存空间就被释放,那么num也就不存在了,
  也就是说num只在这个方法中有效,在这方法之外num就不存在了

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 陈嘉宾 于 2012-6-19 00:08 编辑

1equals如果没被复写和==作用是一样的,都是判断两个对象引用是否指向通一个地址,String类复写了Object的equals()方法就表示比较它们“实际意义上相等”比较的是内容,而不是引用地址
2
        int num=10;
   
}应该是放在栈区。查了一下。被static修饰的属性存放空间不在栈内存或堆内存,而一个独立的内存空间,叫方法区,或数据区、共享区;
类变量随着类的加载而存在于方法区中。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
rchm 黑马帝 2012-6-18 23:55:48
报纸
equals比较的是字符串的值!跟==是不同的!
回复 使用道具 举报
1、String的equals方法已经覆写了Object的equals,比较的是字符串的值是否相等,而不是比较对象的地址了
2、存在于栈内存中,方法运行完就释放了
回复 使用道具 举报
吴扬 中级黑马 2012-6-19 00:42:15
7#
1.equals这个方法本身是Object这个类中的方法,它比较的是两个对象的引用是否指向同一个内存地址值。但是在String这个类中将equals方法覆写了,比较的不是引用的内存地址值,而是字符串对象的内容是否相等。虽然a1和a2是两个不同的对象引用,但是这两个对象的内容都是"B",所以a1.equals(a2)返回的结果是true。
2.run方法中的变量num由于是局部变量,它只有在方法被调用的时候才会在栈内存中产生,当方法结束之后,就会被垃圾回收机制也就是GC所处理,将内存释放。
回复 使用道具 举报
本帖最后由 胡大强 于 2012-6-19 01:33 编辑

equals 方法:(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==:用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
当然  int  num=10;也是存放在栈内存中的。。。方法运行完了之后,就会释放

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马