当前位置: 代码迷 >> Java Web开发 >> 会java,有OOP思想的人进来看!请版主置顶
  详细解决方案

会java,有OOP思想的人进来看!请版主置顶

热度:206   发布时间:2006-05-23 16:53:00.0

List def =new ArrayList();
这一句是不是说地 :定义了一个List 的一个对象 def ,可是却分配了一个ArrayList对象的内存空间.
def 是一个对象,new ArrayList()也是一个对象.
我真的快要死拉.学了好久了。这些问题还是搞不明白...


----------------解决方案--------------------------------------------------------
你会C吗?
List def =new ArrayList();
def是在java中叫做引用,楼上的兄弟已经说过了,他就好比C中的指针,他里面存放的是一个地址,这个地址就是对象所在的地址(内存的地址)。
new ArrayList()是指的创建一个新的ArrayList的对象,java会在内存当中开辟一块内存去放他。
整个的这一句话的解释就是,创建一个默认的ArrayList的对象,然后把这个对象的地址赋给def(对象的引用),这样解释应该是挺形象的了,但是,也有不少地方的解释是创建一个ArrayList对象,然后将对象的引用--def和他关联起来!
这是第一题的第二个小题的答案!应该比较标准了吧!如果有问题,请大家提出来,谢谢!
另外,我决定今天下午公布答案了,因为可能周末的一段时间会有点事情,不能准时发答案了,所以,决定今天公布!
----------------解决方案--------------------------------------------------------
公布答案啦!
String abc = new String("123");
这个地方应该是创建了三个对象,大家不要急,应该多试验一下,就知道了!
首先,大家都只到,"123"是一个对象,我就不用说了(注:只是一个临时对象,很快就会被java垃圾回收的)。
其次,new String()这又是创建了一个对象!这个大家应该也都知道!
最后,也就是最有难度的一个地方!String和别的类是不一样的!他的那个“abc”,不是叫做对象的引用,他也是一个对象,大家一定都没有注意过吧!你可以是一下:
String a = "123";
String b = a;
b = b + "1";
System.out.println("a: " + a);
System.out.println("b: " + b);
然后,你可以同理去试验一下其他的类!
----------------解决方案--------------------------------------------------------
所有的类都是继承于Object这个类,因为,我们写的所有的类,最终都要生成对象这个实际的东西,所以,都是继承于Object这个类,很多人都知道答案了,但是,没有仔细的想过!
----------------解决方案--------------------------------------------------------
最后一个题了,null,很多人都说这是一个空引用,这样的说法不太对,引用?存的是地址吗?他是一个确切的对象,如同你们写的"123"一样,也是一个对象!
----------------解决方案--------------------------------------------------------
我的问题的回答完了,如果大家有什么不同的意见或着要给我说我那个地方说错了,大家可以一起讨论!我希望我发的这个帖子能够对大家有点帮助!
----------------解决方案--------------------------------------------------------
对了,版主是不是应该给我加点经验了啊?我发了这么多东西了!怎么还是一个小小的游民啊!等级太低了啊!
----------------解决方案--------------------------------------------------------
我不会C,只学了JAVA,还很不好.
呵呵 大哥QQ留下行不,我想跟大哥好好学学...

----------------解决方案--------------------------------------------------------

呵呵
又来要经验了呀
不过答对的人确实不多的哈

哈哈哈
我也是一样的


连答都不敢答哟


----------------解决方案--------------------------------------------------------
以下是引用yangwudong在2006-5-23 17:21:00的发言:
公布答案啦!
String abc = new String("123");
这个地方应该是创建了三个对象,大家不要急,应该多试验一下,就知道了!
首先,大家都只到,"123"是一个对象,我就不用说了(注:只是一个临时对象,很快就会被java垃圾回收的)。
其次,new String()这又是创建了一个对象!这个大家应该也都知道!
最后,也就是最有难度的一个地方!String和别的类是不一样的!他的那个“abc”,不是叫做对象的引用,他也是一个对象,大家一定都没有注意过吧!你可以是一下:
String a = "123";
String b = a;
b = b + "1";
System.out.println("a: " + a);
System.out.println("b: " + b);
然后,你可以同理去试验一下其他的类!

这段代码 ...我觉得有问题
在java里,因为String 属于较常用的东西,所以 它有两种.
一个是 new String() 另一种是 直接 ="acc" 这样的(为了运行起来速度快)
这两种,的区别 主要在于 存放的位置
acc 这个存放到了 类似 常量池(有的好像称为 字符串 池里,而且 这个里面的 字符串是没有重复的)
所以 , String a="123", 这样 是把 "123" 放到了 字符串池里,
String b=a 是说,让b也去 指向 字符串池里的 "123" 这个字符串
之后 字符串 b=b+"1" ,因为 字符串池里 没有相同的字符串,所以 会在里面新生成一个 字符串"1231",
这个时候 b 指向了这个新生成的字符串"1231",

而String abc = new String("123"); 这个就不一样了,
它是把"123" 这个放到堆里,它和放到常量池里的"123",意义不一样

所以 String abc = new String("123"); 应该就是一个引用.一个对象

在String这个类里,由于equals用来比较字符串的内容,那么用==来比较 引用

String a="123";
String b="123";
if(a==b){...你要输出的内容}
如果输出,就表示 a和b指向了相同的对象,也就是 字符串池里有个"123"字符串

同样的 可以试试
String c=new String("123");
String d=new String("123");
再去通过==去比较一下它们的引用

[此贴子已经被作者于2006-5-23 21:30:12编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案