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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵家阳 中级黑马   /  2012-9-20 00:15  /  2229 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Test{
  2.         private int num;
  3.         Test( int num){
  4.                 this.num = num;
  5.         }
  6. }
  7. public class DemoD {
  8.         public static void main(String[] args){
  9.                 Test t = new Test(8);
  10.                 System.out.println(t.toString());        //类似输出:Test@1ec8909
  11.                 System.out.println(t);                //输出内容同上,Test@1ec8909
  12.                 System.out.println(t instanceof Object);     //输出:true
  13.                 System.out.println(t.toString() instanceof Object);   //输出:true
  14.                 //System.out.println(t.toString()==t);        //那为什么这句话编译不能通过?
  15.         }
  16. }
复制代码
以上代码为本机测试,其中,System.out.println(t.toString());     和  System.out.println(t);  输出内容相同,那么为什么 System.out.println(t.toString()==t);    编译不能通过??请各位指点!
灌水者请绕道!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

6 个回复

正序浏览
赵宇 中级黑马 2012-9-20 19:07:25
7#
赵家阳 发表于 2012-9-20 17:29
System.out.println(t instanceof Object);     //输出:true
                System.o ...

多态。t instanceof Object
         t.toString() instanceof Object
回复 使用道具 举报
                Test t = new Test(8);

                System.out.println(t.toString());        //类似输出:Test@1ec8909

                System.out.println(t);                //输出内容同上,Test@1ec8909

                System.out.println(t instanceof Object);     //输出:true
               
                System.out.println(t.toString() instanceof Object);   //输出:true
                t.toString() 表示的是一个字符串,字符串对象也是继承自“上帝”Object的,所以输出的是true
                //System.out.println(t.toString()==t);        //那为什么这句话编译不能通过?
           这句话不能编译的原因是由于 t 是一个对象,是一个引用类型, 而t.toString() 是一个字符串  当然不能判断相等了  
           “==” 左右两边的类型都不匹配 , 怎么会编译通过呢。
         
回复 使用道具 举报
疯子雨 发表于 2012-9-20 08:57
class Test{
        private int num;
        Test( int num){

                System.out.println(t instanceof Object);     //输出:true
                System.out.println(t.toString() instanceof Object);   //输出:true
那么你能告诉我上面这两句代码是什么意思么?重点解释一下   t instanceof Object   是什么意思?
如果t.toString()是一个字符串,那么 t.toString() instanceof Object   为什么会是true呢?
回复 使用道具 举报
明光照 来自手机 中级黑马 2012-9-20 10:37:16
板凳
T是一个对象,t.tostring是一个String。而你直接打印对象会调用.tostring方法。当然打印的内容是一样的。而你在后面直接比较的两个类型不一样。肯定会报错
回复 使用道具 举报
class Test{
        private int num;
        Test( int num){
                this.num = num;
        }
}
public class DemoD {
        public static void main(String[] args){
                Test t = new Test(8);
                System.out.println(t.toString());        //类似输出:Test@1ec8909    // t是一个对象的引用 实际上会打印出引用所指对象的 toString()方法的返回值。
                System.out.println(t);                //输出内容同上,Test@1ec8909       //因为每个类都直接或间接       地继承自 Object,而 Object 类中定义了 toString(),
                System.out.println(t instanceof Object);     //输出:true                  //因此每个类都有toString()这个方法,默认就是调用tostring(),所以结果一样
                System.out.println(t.toString() instanceof Object);   //输出:true
                //System.out.println(t.toString()==t);        //那为什么这句话编译不能通过?  //肯定不能编译啊,此时t.toString()是字符串,而后面的t 是引用,类型不一致。
                                                                                                                                        //                                                                   Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)
                                                                                                     、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
                                                   getClass().getName() + '@' + Integer.toHexString(hashCode())

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
第一句输出t.toString(),是对象t调用to.String()的方法返回地址值,不是对象
第二句输出t,t是一个对象,输出t就是输出t的地址值,
两者一个是对象,一个不是对象,没有比较性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马