String为什么可以把字符串内容打印到控制台上?
今天突然想到,String打印在控制台上的实现机制是怎样的?String的底层是final修饰的char[ ]数组,那它被打印在控制台上是用Arrays.toString()方法实现的吗?带着问题我们来进入源码了解一下.
首先看一下打印字符串的示例:
打开String的源码,可以查看到创建str对象是调用的一个有参构造String
这里的value,是String的底层数据结构,可以看到是一个char [ ]
这里就有问题了,因为这里存储用的数据结构是一个private修饰的,外部想要获得该私有属性只能通过反射和get方法,由于String使用范围面之广,不可能所有用到String的jdk包中都采用暴力破解的方式访问此属性,那么只能从get方法获得,所以我们在该类中找找getter方法:
很显然,String并没有提供直接返回值给外界,那就奇怪了,System.out.println()方法是怎么访问到其私有成员变量的呢?
回过头来看看System.out.println()的源码