A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

yooozooo

中级黑马

  • 黑马币:8

  • 帖子:24

  • 精华:0

© yooozooo 中级黑马   /  2014-4-18 18:23  /  1269 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问,以下代码中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. }
复制代码



10 个回复

倒序浏览
因为ch是字符数组类型,打印的时候是没有结果的。下边的两个语句。语句2有类型提升,最后句toString()
回复 使用道具 举报
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
回复 使用道具 举报 1 0
^o(孤8o|狼i¤F 发表于 2014-4-18 18:49
public class CharArrayDemo {
        public static void main(String[] args) {
                char[] ...

首先感谢你的回复,话说你运行了吗?
回复 使用道具 举报
yooozooo 发表于 2014-4-18 20:32
首先感谢你的回复,话说你运行了吗?

运行了的
回复 使用道具 举报
回复 使用道具 举报

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

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

捕获.PNG
回复 使用道具 举报

那你怎么说第一句和第二句一样啊  输出结果明明不一样啊
为什么???
回复 使用道具 举报
2528870651 发表于 2014-4-18 23:53
那你怎么说第一句和第二句一样啊  输出结果明明不一样啊
为什么???

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

我也知道结果会变 啊, 就是不明白按理说+“”是变成了字符串啊 ,怎么输出结果会是一个数组类型的地址呢?? 难道是字符数组不能听过+“”来变成字符串??
回复 使用道具 举报
关于语句1:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。此时你的数组元素隐式初始化为空格符号。
语句2和语句3是相同的原理。+“”相当于调用数组的toString方法,所以都是输出的地址。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马