Java 直接输出对象 变成@.....的解决办法

为什么我用System.out.println()输出一个对象会变成@.......的  例如 object.student@1d8d30f7

原因在次:(假设我的对象名是student s =new student ();

    1.以下代码就是System.out.println(),中println,Java的底层代码

 public void println(Object x) {
        String s = String.valueOf(x);

可以发现出现了个String.valueOf(x),这个x此时就等于s也就等于new student ()


2.valueOf(x)的底层源码就是下图

 public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

这个obj就等于=x=s=new student(),此时return (obj == null) ? "null" : obj.toString();运用了三元运算符,因为obj不等于null,所以直接执行了表达式三,也就是obj.toString()


3.toString()的底层源码是

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

这个方法里面只有return getClass().getName() + "@" + Integer.toHexString(hashCode());

所以在你的控制台里面出现了   @.....什么的

至于为什么,是因为在继承里面有个最终类也就是object,所有的类都直接或者间接继承自object,你在你的类里面没有写toString,他就会默认执行object里面的指定代码

所以.....在你的类里面加个toString方法就好了 ,也就是在被实例化的那个类,在我这篇文章里面是student


解决办法:

.eclipse的快捷键是  shift+alt+s

在student里面  按下 shift+alt+s 倒数第四个,选择需要的变量,点击生成,像下图一样,然后就去执行下main方法就好了

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,我们需要将字符串 "2023.06.05" 转换成日期对象,然后再将日期对象转换成我们需要的格式,即 "6月6日"。 以下是示例代码: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtils { // 将字符串转换成日期 public static Date stringToDate(String strDate, String pattern) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.parse(strDate); } // 将日期转换成字符串 public static String dateToString(Date date, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); } // 将日期字符串格式化为指定格式 public static String formatDate(String strDate, String originPattern, String targetPattern) throws ParseException { Date date = stringToDate(strDate, originPattern); return dateToString(date, targetPattern); } } ``` 使用示例: ```java String strDate = "2023.06.05"; String originPattern = "yyyy.MM.dd"; String targetPattern = "M月d日"; try { String formattedDate = DateUtils.formatDate(strDate, originPattern, targetPattern); System.out.println(formattedDate); } catch (ParseException e) { e.printStackTrace(); } ``` 输出结果: ``` 6月5日 ``` 注意,这里输出的结果是 "6月5日",因为原始日期中的月份是 6,而不是 6 月 6 日。如果需要输出 "6月6日",则需要将 originPattern 参数修改为 "yyyy.MM.dd",即: ```java String originPattern = "yyyy.MM.dd"; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想给世界留下 1bite 的印象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值