黑马程序员技术交流社区

标题: JAVA小知识点-----盖楼啦!! [打印本页]

作者: 朱玲均    时间: 2011-7-18 00:10
标题: JAVA小知识点-----盖楼啦!!
有时候,我们会发现有些小知识点我们懂,但是懂得不彻底,这些都是我们所学知识点的漏洞,弥补了这些漏洞,我们的基础就会越来越扎实!


比如我们大概都知道String类表示内容不可变的字符串,StringBuffer类表示内容可变的字符串。
但是,new String(“abc”).equals(new String(“abc”)的结果为true                        

new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为false     -->因为String类覆盖了父类的equals方法
这你也同时掌握了么?




希望大家多多举一些我们平时容易忽视的小例子,让我们更加强大!:handshake
作者: 匿名    时间: 2011-7-18 00:23
还有,String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。

就像下面的代码一样,
                List al = new ArrayList();
                al.add(new StringBuffer("haha"));                                                    ①
                if(!al.contains(new StringBuffer("haha"))){                                     ②
                        System.out.println("看样子StringBuffer没有覆盖equals方法和hashCode方法!");
                }
结果是打印出了上面这句话。
说明if的括号里面返回了true,al.contains(new StringBuffer("haha"))返回了false,那就进一步说明了
①行new 的“haha”字符串对象和②行new的“haha”字符串对象不相同。这是因为,比较的时候是比较
两个对象的地址值。而在应用中,既然集合里面已经有了“haha”这个字符串,我们再new一个StringBuffer
“haha”的时候,就应该判断两者相同了。这时我们就应该对equals方法和hashCode方法进行覆写。
作者: 匿名    时间: 2011-7-18 00:34
在论坛里面,平时我们大多围绕一个问题展开回答,可能这个问题解答之后受益人只有提问题的人自己,我们需要再广阔一点的范围,让给多的人收益。比如,晒出你认为自己掌握了而别人没有掌握的知识点,这样有很多好处。
首先,有可能你这个自认为掌握的知识点其实你自己也理解错了,但是你确认为你自己是掌握了的,所以在论坛里面你就不可能再向别人进行提问,这样就会把错误埋藏深处,藏下祸患,对自己不利,你在这里说出来后就有权威人士帮着改正;
其次,很大的可能性是你掌握对了这个知识点,拿来我们一起分享,同时我们也受益匪浅了。

这样,受益面就广多了。
作者: 朱玲均    时间: 2011-7-28 20:02
标题: JAVA标签
  1. public class LabelTest {
  2.         public static void main(String[] args){
  3.                 http://bbs.itheima.com
  4.                 System.out.println("黑马论坛");
  5.         }
  6. }
复制代码
粗略一看,第一反应是:编译器应该提示编译错误!
尝试编译运行上面的程序,有以下结果
  1. 黑马论坛
复制代码
分析如下:
        1、http:是一个标签(合法的标识符后紧跟英文分号);
        2、//bbs.itheima.com:双斜线后面的内容被注释掉了。

-----------------------------------------------------------------------------------------------------------------------------
顺便复习一下标签的作用
  1. public class LabelTest {
  2.         public static void main(String[] args){
  3.                 label:
  4.                 for(int i=0;i<10;i++){
  5.                         for(int j=0;j<8;j++){
  6.                                 //break label;标签label控制跳出两(多)重循环,并结束
  7.                                 //continue label;标签label控制跳出多重循环,从标签处继续
  8.                         }
  9.                 }
  10.         }
  11. }
复制代码
[ 本帖最后由 朱玲均 于 2011-07-28  20:03 编辑 ]




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