java中string类重写的tostring是return this ,this也是内存地址,不应该打印的也是内存地址吗?为什么是字符串?求大佬解释困惑好长时间了,硬是想不通
public static void main(String[] args) {
String sb = new String("iphone");
System.out.println(sb);
System.out.println(sb.toString());
}
String对象中的toString方法 return this. this表示当前对象的意思。
String sb = new String("iphone");
System.out.println(sb);
System.out.println(sb.toString());
从这段代码中,也能看出。sb也是String的对象,最后输出的也是字符串。
所以这没啥问题,String类重写了Object的构造方法,虽然return this,但是默认返回的就是字符串。String是特殊的引用类型。
如果想要获取String的地址可以通过sb.getBytes()得到。
toString方法是Object对象的,除了字符串类型的变量,其他对象都是返回地址,除非重写了toString方法。
return this;指向的是this指针指向的当前对象。
// 创建一个类Car
public class Car {
// 成员变量
String color;
String name;
int speed;
int seats;
// 成员方法
public void run() {
System.out.println("跑起来了");
System.out.println(this.color);
System.out.println(this.speed);
System.out.println(this.seats);
}
public static void main(String[] args) {
Car c = new Car();
c.color = "红色";
c.speed = 120;
c.seats = 5;
c.run();
}
}
当你在这个Car 想要return this的时候,返回值必须定义是Car类,不妨尝试一下。
https://codingdict.com/questions/114896
打印this指针地址参考这个方法。
java里所有的类,不管是java库里面的类,或者是自己创建的类,都是从object这个类继承的。object里有一个方法就是toString(),所以其实所有的类创造的时候,都有一个toString的方法。 它通常只是为了方便输出,比如System.out.println(xx),在默认情况下,你输出一个对象,会调用这个对象继承的toString方法,默认的功能是返回这个对象的名称。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
题主解决了吗,你是怎么想通的,我也困惑了好久,还没想通。
作者现在搞明白了吗可否讲讲 我也搞不懂为什么不返回地址
我的理解是这样:所谓一般的tostring方法输出地址,其实是跟this没关系的,你去看看源码,只是获取类名+hash值。而String中的toString方法最后返回的确实是一个引用,因为它的返回类型是String类型,而这个类型是引用类型,所以返回this没错。至于最后为什么会输出值,是因为jvm底层把这个引用给转成了字符串值,因为String引用比较特殊。
好多人都在答非所问 醉了 ,问的是String类型的字符串对象调用toString为啥不是打印地址 String本身又没有重写toString