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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李伟 中级黑马   /  2012-6-27 18:18  /  1676 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李伟 于 2012-6-29 21:43 编辑

class Demo
{
        public static void main(String[] args)
        {
                String s1="java";
                String s2=new String("java");//毕老师好像是说这条语句创建了两个对象,分别是哪两个呢,相对应的地址值呢
                System.out.println(s1);//既然s1和s2都是对象的引用,应该是地址值,那么为什么打印出来的不是地址值,而是字符串。
                System.out.println(s2);
                System.out.println(s1==s2);
                System.out.println(s1.equals(s2));
        }
}

2 个回复

倒序浏览
两个对象一个在堆内存中,一个在常量区中。
System.out.println()是调用的对象的toString()方法,你看String的源代码:
public String toString() {
        return this;
    }
返回的就是当前String对象。
回复 使用道具 举报
虽然说 s1 和 s2 存的都是 java 这个字符串,但是这属于两个不同的对象,所以程序运行创建了2个对象,相对应的地址值就是内存在存储s1和s2的地址值,你可以通过函数调用将相应的地址值打印输出出来, System.out.println(s1);//这里打印输出的自然是s1中存储的字符串了,原因和楼上说的一样,请问楼主你是真的明白了吗,比如说
int a=3;
System.out.println(a);//这里输出3大家都知道,不会输出对应的地址值,不过是将int类型变成了String类型,原理是不变了,就是这样。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马