黑马程序员技术交流社区

标题: 迷糊了 ,求帮忙??? [打印本页]

作者: 乐峰    时间: 2012-5-16 21:02
标题: 迷糊了 ,求帮忙???
1.为啥 String s = "w";可以,而 StringBuffer s1 = "w";不可以,而除了String类,其余都要创建对象?
2.还有 List list =new ArrayList();和ArrayList list1 = new ArrayList();有什么区别吗?
作者: 任睦强    时间: 2012-5-16 21:04
1.“w”是一个String型,那么右面的就是String型,不能自动转换成StringBuffer对象上
为什么呢?虽然String和StringBuffer都可修饰一串字符串。StringBuffer是可变对象,也是可变类!向StringBuffer赋值时是用append方法来赋值!而String其实是StringBuffer的扩展,核心还是他的,只是他扩着了可以直接这样赋值s="".是不可变对象他们都属于类,不过String是不可变类

2.后面那个问题,其实就是List和Arraylist的区别!ArrayList是一个用数组来实现List的类!其实他们两那个写都一样!不一样的是后期维护工作!一般一个借口比如这里的List类借口,他可能有许多实现的类比如(ArrayList和HashList)

List list = new ArrayList()当你这样写的时候,你发现ArrayList满足不了你的需求时,你可以直接改成List list = new HashList();这样就不用该它要涉及到的List类以及用到它的list类



作者: 高云飞    时间: 2012-5-16 21:13
任睦强 发表于 2012-5-16 21:04
1.“w”是一个String型,那么右面的就是String型,不能自动转换成StringBuffer对象上
为什么呢?虽然String ...

有HashList这个东西吗??Collection下有两个接口,一个是list,一个是set,list下有ArrayList、LinkedList和Vector,实现set接口的类有HashSet和TreeSet,哪里有什么HashList啊。
作者: 冯越    时间: 2012-5-16 21:20
关于第一个问题 2 楼已经回答的很好了 我就不再阐述了。
关于第二个问题 其实就是一个 父类引用指向子类对象 是java多态的一个体现 关于这样写用什么好处 那就是多态有什么好处他就有什么好处。
作者: 任睦强    时间: 2012-5-16 21:28
1.“w”是一个String型,那么右面的就是String型,不能自动转换成StringBuffer对象上
为什么呢?虽然String和StringBuffer都可修饰一串字符串。StringBuffer是可变对象,也是可变类!向StringBuffer赋值时是用append方法来赋值!而String其实是StringBuffer的扩展,核心还是他的,只是他扩着了可以直接这样赋值s="".是不可变对象他们都属于类,不过String是不可变类

2.后面那个问题,其实就是List和Arraylist的区别!ArrayList是一个用数组来实现List的类!其实他们两那个写都一样!不一样的是后期维护工作!一般一个借口比如这里的List类借口,他可能有许多实现的类比如(ArrayList和HashList

List list = new ArrayList()当你这样写的时候,你发现ArrayList满足不了你的需求时,你可以直接改成List list = new HashList();这样就不用该它要涉及到的List类以及用到它的list类

上面红色的部分是我一时疏忽打错了,实在是不好意思,应该改成:
LinkedList,Vector
List list = new LinkedList();或者List list = new Vector();
作者: 任睦强    时间: 2012-5-16 21:29
高云飞 发表于 2012-5-16 21:13
有HashList这个东西吗??Collection下有两个接口,一个是list,一个是set,list下有ArrayList、LinkedLi ...

谢谢同学的提醒!:)
作者: 高云飞    时间: 2012-5-16 21:40
任睦强 发表于 2012-5-16 21:28
1.“w”是一个String型,那么右面的就是String型,不能自动转换成StringBuffer对象上
为什么呢?虽然String ...

另外,Vector过时了,已经被ArrayList取代了。
作者: 永恒之翼网络    时间: 2012-5-17 16:04
1.为啥 String s = "w";可以,而 StringBuffer s1 = "w";不可以,而除了String类,其余都要创建对象?
String s 是定义个指向字符串的应用变量,"w"是一个字符串,String s = "w"就是把字符串"w"的地址赋给s,"="赋值运算符,所以"String s = "w";"可行是理所当然的。StringBuffer s1是定义一个指向字符串缓存对象的变量,所以不把"w"的地址赋给它。除了String类,其余都要创建对象,是因为java为了使用方便,把String在定义时简化得像基本数据类型,那样好用。
2.还有 List list =new ArrayList();和ArrayList list1 = new ArrayList();有什么区别吗?

有区别,List list =new ArrayList();是子类当父类使用,list只能使用父类中已有的方法,而不能使用Arraylist中的特有方法。ArrayList list1 = new ArrayList();中的list1可以使用ArrayList中的特有方法。




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