java String类的对象输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java String类的对象输出相关的知识,希望对你有一定的参考价值。

代码: String n = "中国"; System.out.println(n);
输出的结果是:中国
我想问的是 n既然是String类的一个对象 是一个引用型数据 输出的为什么不是哈希码 怎么就直接输出堆内存中的内容了
例如 class A; A a = new A();System.out.println(a);
输出是:AA@41413EF
对象输出的时候调用的是toString(),我在String 类的JDK中没看到覆写它啊?怎么就输出不是类似“AA@41413EF”这样的内容?求高手解答

这个主要是怎么调用toString()的,
1.String 类中覆盖了父类的tostring()方法,所以原样输出
public String toString()
return this;


2.你自己定义的A类,由于没有覆盖toString 方法,所以他会调用父类Object(Object是一切类的父类)中的toString方法
public String toString()
return getClass().getName() + "@" + Integer.toHexString(hashCode());


所以会得到AA@41413EF的内容
参考技术A 字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。

普通的类是Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。

但是String 类型中 JDK是这样解释的:
toString()
返回此对象本身(它已经是一个字符串!)。

所以这个就不要纠结了吧,它本身就是一个数据类型。
返回此对象本身(它已经是一个字符串!)。

指定者:
···接口 CharSequence 中的 toString
覆盖:
···类 Object 中的 toString
返回:
····字符串本身。

参考资料:JDK API

参考技术B 楼上都是扯淡,原因很简单:去查查println()源码,println()方法,打印输出的就是字符串的内容。 所谓的return this 。this指的是本对象,是对象的物理内存地址值,java无法拿到这个地址值,所以超类会用toString方法写成字符串类型的哈希地址值。 参考技术C String里面重写了Object.toString()方法,返回的是字符串本身
public String toString()
return this;


A没有重写Object.toString()方法,执行的是父类Object.toString(),所以返回类似内存地址的东西
参考技术D 这不是在string类进行重写的。你输出一个字符串的类型,默认调用的是tostring方法没错,但是调用的是object类的tostring方法。追问

字符串类型也是一个引用数据吧 为什么可以直接输出内容呢?

追答

你给它赋值了,不是你NEW 的
toString():是利用字符串来表示对象。
当我们直接打印定义的对象的时候,隐含的是打印toString()的返回值。
可以通过子类作为一个toString()来覆盖父类的toString()。
以取得我们想得到的表现形式,即当我们想利用一个自定义的方式描述对象的时候,我们应该覆盖toString()。

Java String类

代码中遇到字符串常量的时候,编译器会使用该值创建一个String对象。
字符串连接可以用concat方法,也可以用运算符 +。

创建格式化字符串:
可以用printf方法和format方法。
String类使用静态方法format返回一个String对象而不是PrintStream对象。
String类的静态方法format能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。

 

StringBuffer和StringBuilder类
当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次修改,并且不产生新的未使用对象。
StringBuilder类在Java5中被提出,和StringBuffer之间最大的不同在于StringBuilder的方法不是线程安全的(不能被同步访问)而且StringBuilder相较于StringBuffer有速度优势。所以大多数情况下建议使用StringBuilder类,但是在要求线程安全的情况下必须使用StringBuffer。

以上是关于java String类的对象输出的主要内容,如果未能解决你的问题,请参考以下文章

java中string类创建对象

Java基础16-String类(Buffer和Builder)

Java-String类的常用方法总结

java中Integer类的对象转成object类,但是为啥tostring输出的是数字不是地址

Java的输出方式

《java基础知识》Java字符串详解