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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏德宇 中级黑马   /  2013-12-22 14:20  /  960 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. public class EnumTest {
  2.         public static void main(String[] args) {
  3.                 WeekDay weekDay = WeekDay.SUN;
  4.                 System.out.println(weekDay.nextDay());
  5.         }
  6. }

  7. class WeekDay {
  8.         private WeekDay(){}
  9.        
  10.         public final static WeekDay SUN = new WeekDay();
  11.         public final static WeekDay MON = new WeekDay();
  12.        
  13.         public WeekDay nextDay(){
  14.                 if(this == SUN){
  15.                         return MON;
  16.                 } else {
  17.                         return SUN;
  18.                 }
  19.         }
  20.        
  21.         public String toString(){
  22.                 return this == SUN ? "SUN" : "MON";
  23.         }
  24. }
复制代码


应该是打印出对象的形式啊,为什么会打印出 “MON”?

评分

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

查看全部评分

8 个回复

倒序浏览
查了一下,System.out.println(对象),在当前对象中,没有覆盖toString方法的情况下,这语句可以打印出该对象的类名,哈希码等等
回复 使用道具 举报
本帖最后由 776699 于 2013-12-22 14:40 编辑

你不是调用了nextDay()方法嘛,问题就出在这个方法上,你的weekDay 不就是与SUN吗,相等毫无疑问的啊,既然该条件为真肯定返回MON啦,而且你重写了toString方法,所以打印出了MON.
        public WeekDay nextDay(){
                if(this == SUN){//你的weekDay 不就是与SUN吗,相等毫无疑问的啊,既然该条件为真肯定返回MON啦,而且你重写了toString方法,所以打印出了MON
                        return MON;
                } else {
                        return SUN;
                }
        }
        
        public String toString(){
                return this == SUN ? "SUN" : "MON";
        }

评分

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

查看全部评分

回复 使用道具 举报
查了一下,当一个Object实例被转化成String时,Java就会自动调用toString()方法返回一个String。System.out.println标准输出,只能输出String,所以,所有需要输出的Object都会被转化成String,Java会自动调用Object的toString()。
回复 使用道具 举报
776699 发表于 2013-12-22 14:30
SUN = new WeekDay();是一个新的对象,有一个新的内存地址值,不同的内存地址比较所以返回false,所以为,M ...

谢谢……
回复 使用道具 举报
夏德宇 发表于 2013-12-22 14:34
查了一下,当一个Object实例被转化成String时,Java就会自动调用toString()方法返回一个String。System.out ...

这里你重写了toString方法,当然会打印自定义的字段了,不重写的话会打印对象
回复 使用道具 举报
首先,你已经在这段代码初始化默认WeekDay为sun  
  1. public class EnumTest {
  2.         public static void main(String[] args) {
  3.                 WeekDay weekDay = WeekDay.SUN;
  4.                 System.out.println(weekDay.nextDay());
  5.         }
  6. }
复制代码


然后你在if语句中判断this==sun,条件成立,自然是输出MON
  1.   public WeekDay nextDay(){
  2.                 if(this == SUN){
  3.                         return MON;
  4.                 } else {
  5.                         return SUN;
  6.                 }
  7.         }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
776699 发表于 2013-12-22 14:30
你不是调用了nextDay()方法嘛,问题就出在这个方法上,你的weekDay 不就是与SUN吗,相等毫无疑问的啊,既然 ...

谢谢……
回复 使用道具 举报
青菜白汤 发表于 2013-12-22 15:02
首先,你已经在这段代码初始化默认WeekDay为sun  

谢谢……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马