对toString方法的几点问题

对toString方法的几点问题

1、toString方法在Object类里的作用是:打印这个类的字符串表现形式。

老师,就是说,Object类的对象调用了toString,打印的就是Objcet的字符串?

字符串是:类名+@+内存地址,这个内存地址指的是Object类的对象地址?还是Object类本身自己的地址?

2、老师,Object类中的equals方法和toString方法,它们的方法是什么样子的?请把它们粘贴出来,我加深下对这块知识的印象,不然老是重写它们,但是都不知道它们本身是什么样子。

3、toString方法是默认在每个类里导入吗?因为在课程里,有这样的两种toString的写法:

        System.out.println(one.toString());
        System.out.println(one);

我很纳闷,toString默认加载在对象one后面,它是怎么认识到此时需要默认加载,或者不需要加载的?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好!对于第一点你的理解是对的。对于第二点,其实就是在不重写toString()方法时的输出结果。

关于第二点,你可以看一下如下代码的输出结果

public class Animal {
private String name;
private int age;
public Animal() {}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Test2 {
public static void main(String[] args) {
Animal animal=new Animal("animal",4);
System.out.println(animal);
}
}

运行效果如下:

http://img1.sycdn.imooc.com//climg/5ccd02900001015502800040.jpg

因为Animal没有重写toString()方法,所以运行效果就是上述的样子。@前面的是类名,也就是getClass().getName()得到的结果,后面的十六进制数,就是hashCode值转换为16进制数字的结果。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕阿莹 2019-05-01 20:14:19

1、是Object类的对象地址的地址,这里同学不需要纠结,这里记住,如果引用类重写了toStirng方法,输入改对象就好默认去调用重写好的toString方法就可以了,如果没有重写就会输出地址值,记住就可以了。

2、,不建议同学在现阶段去看源码,现阶段同学最重要的任务就是学会使用呦。

Object中的equals方法:

http://img1.sycdn.imooc.com//climg/5cc98ac50001b1fe04130102.jpg

toString方法

http://img1.sycdn.imooc.com//climg/5cc98ae00001ac8e07500118.jpg

3、同学重写后输出时会默认加载toString方法,这是底层代码加载的哦。同学这里记住就可以。

如果没有重写toString方法,就会调用Object中没有重写的toString方法。

如果我的回答解决了你的问题,请采纳,祝学习愉快.


  • 提问者 鱼儿0001 #1
    老师,1、toString的作用就是:返回与对象有关的字符串?至于能返回出来什么,就得看是不是重写后的toString方法? 2、我看懂了equals的源码,但是toString的源码看不懂。
    2019-05-02 11:43:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师