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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒙武辉 黑马帝   /  2012-2-15 12:07  /  4957 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
class ColectionDemo
{
        public static void main(String a[])
        {
                ArrayList al=new ArrayList();
                al.add("java1");
                al.add("java2");
                al.add("java3");
                al.add("java4");
                sop("size:"+al.size());
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);//字符串是对象吗?这里怎么样解释呢?应该String才对的。怎么(Object obj)也可编译成功呢?

        }
}

评分

参与人数 2技术分 +2 收起 理由
技术测试刘老师 + 1
admin + 1 明白了,可以把帖子标题改成已解决哦!.

查看全部评分

9 个回复

正序浏览
对象是类的实例,String是一个类,每一个字符串都是String的实例,每个类都是object的子类。String string = newString("java");String string = "java";两种初始化方式,第一种是用new,毫无疑问产生了一个新对象,而第二种产不产生对象要看字符串池中有没有"java"字符串,若有就直接指向原来的对象地址,没有就新创建一个对象。
回复 使用道具 举报
蒙武辉 黑马帝 2012-2-15 13:42:50
9#
明白了,谢谢大家的指点。
回复 使用道具 举报
钟保罗 黑马帝 2012-2-15 13:24:35
8#
李杨 发表于 2012-2-15 12:58
同学你好。

不是相当于String string = newString("java");

谢谢。。。。。
回复 使用道具 举报
李杨 黑马帝 2012-2-15 12:58:51
7#
钟保罗 发表于 2012-2-15 12:52
字符串是对象啊!   除了那些基本数据类型! String string = "java1"    就相当于String string = new Stri ...

同学你好。

不是相当于String string = newString("java");

String string = "java";不会在堆内存中分配空间。

String string = newString("java");
会在堆内存中分配空间。
这两个有区别的,虽然new的时候会去字符串池中找,找不到则创建然后返回,但是new会现在开辟堆空间后才去字符的串池中那数据。
第一种不会在堆中分配内存,而是直接去字符串池中拿。

两个不是同一个对象,所以不能相当于。
而equals比较两个对象持有的字符串池中的"Java"这个值,所以是相等。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
字符串是对象啊!   除了那些基本数据类型! String string = "java1"    就相当于String string = new String("java1");了
回复 使用道具 举报
Akm 黑马帝 2012-2-15 12:40:53
报纸
面向对象说一切都是对象…string、字符串当然也可以是对象哦 :loveliness:… 一般对象有属性


回复 使用道具 举报
任何引用类型的对象都可转变为父类类型。Object中有一个toString()方法,会自动调用,返回对象的字符串表现形式。sop("size:"+al.size());使用了自动装箱,将int变成Integer类型。
回复 使用道具 举报
当然是对象了,字符串池中的值也是个对象,而你new当然一定是对象.new对象的话会在堆中分配内存,如果你new多个对象就会在堆中分配多块内存,如果你在字符串池中创建的对象,当你创建同一个对象的时候,第二次创建的就会返回第一次创建的.

String str1 = "hello";
String str2 = "hello";

str1和str2是同一个对象.来自于同一个地址.

你要是
String str1 = new String("hello");
String str2 = new String("hello");

两次new都会在堆中分配多余的内存。
所以呢平时最好不要直接new。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
java中除了基本数据类型外,其他的均为对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马