黑马程序员技术交流社区

标题: 字符串是对象吗? [打印本页]

作者: 蒙武辉    时间: 2012-2-15 12:07
标题: 字符串是对象吗?
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)也可编译成功呢?

        }
}
作者: 侯丽星    时间: 2012-2-15 12:12
java中除了基本数据类型外,其他的均为对象。
作者: 李杨    时间: 2012-2-15 12:18
当然是对象了,字符串池中的值也是个对象,而你new当然一定是对象.new对象的话会在堆中分配内存,如果你new多个对象就会在堆中分配多块内存,如果你在字符串池中创建的对象,当你创建同一个对象的时候,第二次创建的就会返回第一次创建的.

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

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

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

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

作者: 黄锦成    时间: 2012-2-15 12:20
任何引用类型的对象都可转变为父类类型。Object中有一个toString()方法,会自动调用,返回对象的字符串表现形式。sop("size:"+al.size());使用了自动装箱,将int变成Integer类型。

作者: Akm    时间: 2012-2-15 12:40
面向对象说一切都是对象…string、字符串当然也可以是对象哦 :loveliness:… 一般对象有属性



作者: 钟保罗    时间: 2012-2-15 12:52
字符串是对象啊!   除了那些基本数据类型! String string = "java1"    就相当于String string = new String("java1");了
作者: 李杨    时间: 2012-2-15 12:58
钟保罗 发表于 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"这个值,所以是相等。

作者: 钟保罗    时间: 2012-2-15 13:24
李杨 发表于 2012-2-15 12:58
同学你好。

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

谢谢。。。。。
作者: 蒙武辉    时间: 2012-2-15 13:42
明白了,谢谢大家的指点。
作者: 石德志    时间: 2012-2-15 23:22
对象是类的实例,String是一个类,每一个字符串都是String的实例,每个类都是object的子类。String string = newString("java");String string = "java";两种初始化方式,第一种是用new,毫无疑问产生了一个新对象,而第二种产不产生对象要看字符串池中有没有"java"字符串,若有就直接指向原来的对象地址,没有就新创建一个对象。




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