黑马程序员技术交流社区

标题: 近2天学习的问题 [打印本页]

作者: 邹颖    时间: 2012-6-18 23:23
标题: 近2天学习的问题
本帖最后由 邹颖 于 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(){}……

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

建议;管理员和版主在加技术分的时候也应该看看后面人的回答,如果回答的好,或者有道理也应该加点分
作者: 张立江    时间: 2012-6-18 23:31
1,equals 是比较两个值的大小,而且在不重写的情况下是比较两个值内容是否相等;
2,方法中的局部变量也是存放在栈内存中的,当方法运行完之后,局部变量在栈内存中的空间也就被释放了。
作者: 胡卿    时间: 2012-6-18 23:36
1.String a1="B";
String a2= new String("B");

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

2.说局部变量是存放在栈内存中,当方法运行完毕后,栈内存空间就被释放,那么num也就不存在了,
  也就是说num只在这个方法中有效,在这方法之外num就不存在了
作者: 陈嘉宾    时间: 2012-6-18 23:36
本帖最后由 陈嘉宾 于 2012-6-19 00:08 编辑

1equals如果没被复写和==作用是一样的,都是判断两个对象引用是否指向通一个地址,String类复写了Object的equals()方法就表示比较它们“实际意义上相等”比较的是内容,而不是引用地址
2
        int num=10;
   
}应该是放在栈区。查了一下。被static修饰的属性存放空间不在栈内存或堆内存,而一个独立的内存空间,叫方法区,或数据区、共享区;
类变量随着类的加载而存在于方法区中。
作者: rchm    时间: 2012-6-18 23:55
equals比较的是字符串的值!跟==是不同的!
作者: 孙安庆    时间: 2012-6-19 00:01
1、String的equals方法已经覆写了Object的equals,比较的是字符串的值是否相等,而不是比较对象的地址了
2、存在于栈内存中,方法运行完就释放了
作者: 吴扬    时间: 2012-6-19 00:42
1.equals这个方法本身是Object这个类中的方法,它比较的是两个对象的引用是否指向同一个内存地址值。但是在String这个类中将equals方法覆写了,比较的不是引用的内存地址值,而是字符串对象的内容是否相等。虽然a1和a2是两个不同的对象引用,但是这两个对象的内容都是"B",所以a1.equals(a2)返回的结果是true。
2.run方法中的变量num由于是局部变量,它只有在方法被调用的时候才会在栈内存中产生,当方法结束之后,就会被垃圾回收机制也就是GC所处理,将内存释放。
作者: 胡大强    时间: 2012-6-19 01:31
本帖最后由 胡大强 于 2012-6-19 01:33 编辑

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






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