首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java字符串联接操作符“+”之谜

2012-08-31 
java字符串连接操作符“+”之谜1.3333?2. char[] test {1,2,3} System.out.print(testtest)输

java字符串连接操作符“+”之谜

1.  3+3=33?

2. char[] test = {'1','2','3'}; System.out.print("test"+test);输出test=123吗??

3. "hello world"  不等于"hello"+"world"???

4.“hello world" 也不等于”hello world“????


测试代码及结果如下:

java字符串联接操作符“+”之谜


解惑:

1.众所周知,+号除了有加法功能外,最多的就是被用来连接字符串了,那么这里的+号是用作什么功能呢?显然是用作连接字符串。那么System.out.println('3'+'3');呢?结果将会输出102(3的uicode值是51),这里+号用加法功能。 在java里我们要区别好字符串与字符类型的区别,局部相加并不等于整体。‘H’+‘i’  不等于“hi”。

2. 这与char数组上调用toString方法有关,数组是从Object哪里继承了tostring方法而没有重载,在规范中描述道“返回一个字符串,它包含了该对象所属类的名字,”@“符号以及表示对象散列码的一个无符号十六进制整数”,所以就有了我们那个丑陋的输出了。要正确的输出字符序列,我们可以先调用String.valueOf(test)方法返回一个字符串对象再进行输出(把字符数组先转化为字符串)。当然我们还可以将System.out.println("test="+test);;分开两次来输出以达到目的效果,即:System.out.println("test=");System.out.println(test);

3.这与==符号有关,只有“==”两边的引用指向了同一个对象时结果才会返回true,一般情况下判断引用是否相等我们都推介使用equals方法。

4.这里与“+”号的优先级有关系,不管+号是用作加法还是用作连接字符串,它的优先级都要比“==”号要高,所以System.out.println("h1==h2?:"+h1==h2);等价于:System.out.println(("h1==h2?:"+h1)==h2);永远输出false。如果我们使用System.out.println("h1==h2?:"+h1.equals(h2));就会得到正确的结果了。可见用equals方法可以为我们除掉很多不必要的麻烦。


--例子参考自《java解惑》

热点排行