黑马程序员技术交流社区

标题: 关于字符数组打印输出的问题 [打印本页]

作者: yooozooo    时间: 2014-4-18 18:23
标题: 关于字符数组打印输出的问题
请问,以下代码中3个输出语句有何区别?为什么输出语句1执行后控制台没有打印相应内容?
  1. public class CharArrayDemo {
  2.         public static void main(String[] args) {
  3.                 char[] ch = new char[1];
  4.                 System.out.println("开始打印------");
  5.                 System.out.println(ch);// 输出语句1
  6.                 System.out.println(ch + "");// 输出语句2
  7.                 System.out.println(ch.toString());// 输出语句3
  8.         }
  9. }
复制代码




作者: Up↑Lee↗    时间: 2014-4-18 18:41
因为ch是字符数组类型,打印的时候是没有结果的。下边的两个语句。语句2有类型提升,最后句toString()
作者: ^o(孤8o|狼i¤F    时间: 2014-4-18 18:49
public class CharArrayDemo {
        public static void main(String[] args) {
                char[] ch = new char[1];
                System.out.println("开始打印------");
                System.out.println(ch);// 输出语句1
                System.out.println(ch + "");// 输出语句2
                System.out.println(ch.toString());// 输出语句3
        }
}
你没有给数组赋值 所以打出来的数据是 字符数组 ch在类存当中 的地址只
如果你定义了局部变量 没有给他赋值的话 在类存中变存放的是变量的地制值
你的语句一  与语句二没有区别 空格在打印的时候会自动填充  
输出语句三  你调用了object类的 toString方法
public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

总的来说你三个语句会按照 下面格式显示
getClass().getName() + '@' + Integer.toHexString(hashCode())
[C@2c1e6b

作者: yooozooo    时间: 2014-4-18 20:32
^o(孤8o|狼i¤F 发表于 2014-4-18 18:49
public class CharArrayDemo {
        public static void main(String[] args) {
                char[] ...

首先感谢你的回复,话说你运行了吗?
作者: ^o(孤8o|狼i¤F    时间: 2014-4-18 21:34
yooozooo 发表于 2014-4-18 20:32
首先感谢你的回复,话说你运行了吗?

运行了的
作者: luoyilan222    时间: 2014-4-18 22:17

作者: 2528870651    时间: 2014-4-18 23:50
luoyilan222 发表于 2014-4-18 22:17

恩呢这是我的结果  输出一个 “口”

捕获.PNG (81.12 KB, 下载次数: 27)

捕获.PNG

作者: 2528870651    时间: 2014-4-18 23:53
^o(孤8o|狼i¤F 发表于 2014-4-18 21:34
运行了的

那你怎么说第一句和第二句一样啊  输出结果明明不一样啊
为什么???
作者: ^o(孤8o|狼i¤F    时间: 2014-4-19 00:10
2528870651 发表于 2014-4-18 23:53
那你怎么说第一句和第二句一样啊  输出结果明明不一样啊
为什么???

我看输出是地址 我就给数组赋值了 然后输出的 结果是一样的
这样解释
输出语句 一 你输出 数组名  我们都知道数组名就是代表数组元素第一个地址 所以你输出时第一个元素值
输出语句二  字符数组 与一个字符串相加 就是把两连接在一起 类型也就变了 所以结果会变
作者: 2528870651    时间: 2014-4-19 00:20
^o(孤8o|狼i¤F 发表于 2014-4-19 00:10
我看输出是地址 我就给数组赋值了 然后输出的 结果是一样的
这样解释
输出语句 一 你输出 数组名  我们都 ...

我也知道结果会变 啊, 就是不明白按理说+“”是变成了字符串啊 ,怎么输出结果会是一个数组类型的地址呢?? 难道是字符数组不能听过+“”来变成字符串??
作者: vtming    时间: 2014-4-19 02:51
关于语句1:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。此时你的数组元素隐式初始化为空格符号。
语句2和语句3是相同的原理。+“”相当于调用数组的toString方法,所以都是输出的地址。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2