黑马程序员技术交流社区

标题: 求助:字符串 小问题 [打印本页]

作者: 范国征    时间: 2014-4-17 20:47
标题: 求助:字符串 小问题
关于字符串

String a="hello";
int b=2;
a+=b;
System.out.println(a);
我知道结果是 hello2,但是a+=b中的b在参加运算的时候是什么类型的?在内存中是什么个情况?
是 (String)a=(String)a+(int)b   ?
还是 (String)a=(String)a+(String)b  ?
作者: ^o(孤8o|狼i¤F    时间: 2014-4-17 20:49
当你的String类型的 变量和其他变量相加的时候 会把其他类型的变量自动转换为字符串类型 其实就和
System.out.println( a + b) ;
一样的效果
作者: Ricky_Nick    时间: 2014-4-17 20:50
将int型和字符串类型数据进行运算时,int会先强制转换成字符串类型再运算
作者: 范国征    时间: 2014-4-17 20:52
^o(孤8o|狼i¤F 发表于 2014-4-17 20:49
当你的String类型的 变量和其他变量相加的时候 会把其他类型的变量自动转换为字符串类型 其实就和
System.o ...

在内存中呢?求详解
作者: ノtrack    时间: 2014-4-17 20:53
b提升为String  
作者: kuroro自走核炮    时间: 2014-4-17 20:58
我觉得应该是
(String)a=(String)a+(String)b
(int)2和(String)2在内存中是不一样的。后者是用编码翻译过来的。
作者: 范国征    时间: 2014-4-17 21:02
kuroro自走核炮 发表于 2014-4-17 20:58
我觉得应该是
(String)a=(String)a+(String)b
(int)2和(String)2在内存中是不一样的。后者是用编码 ...

如何加载的?
作者: kuroro自走核炮    时间: 2014-4-17 21:08
范国征 发表于 2014-4-17 21:02
如何加载的?

应该是检测到(String)a+(int)b之后,自动把后面int b转型成了String b
我没记错的话int b在内存中是:00000000-00000000-00000000-00000010
但String b在内存中应该是:00000000-00110010(char是16位的……String的具体我不太清楚,估摸是这样。)
所以应该是出现了一个转型动作。
作者: 橡皮-leo    时间: 2014-4-17 21:11
本帖最后由 橡皮-leo 于 2014-4-17 21:20 编辑

首先a+= b 可以看成是a = a+b;字符串在进行连接运算的时候,是先创建了一个StringBuffer对象,通过StringBuffer这个对象将a的值跟b的值串联在一起的,其实可以看成是
a = new StringBuffer().append("hello").append(2).toString();
个人理解应该是这样子。

作者: Kelvinhu    时间: 2014-4-17 21:16
  1.                 String a = "hello";
  2.                 int b = 2;
  3.                 // a+=b;//这句相当于 a=a+b 如下代码
  4.                 a = a + Integer.toString(b);//任何类型在和String相加的时候,都会先转换成String。
  5.                 System.out.println(a);
复制代码



作者: Kelvinhu    时间: 2014-4-17 21:19
kuroro自走核炮 发表于 2014-4-17 21:08
应该是检测到(String)a+(int)b之后,自动把后面int b转型成了String b
我没记错的话int b在内存中是:000 ...

对的。利用java当中的toString方法

作者: 千殇轮回    时间: 2014-4-17 22:00
本帖最后由 千殇轮回 于 2014-4-17 22:07 编辑

+=中会有一个自动强制转换数据类型的过程,如
  1. class A
  2. {
  3.          public static void main(String[] args)
  4.          {
  5.                   int x = 10;
  6.                  byte y = 11;

  7.                   y+=x;

  8.                   System.out.println(y);//结果是byte21
  9.          }
  10.          
  11.          
  12. }
复制代码

int类型的变量自动转换为byte类型了,你的那个也差不多的
作者: 范国征    时间: 2014-4-19 22:09
^o(孤8o|狼i¤F 发表于 2014-4-17 20:49
当你的String类型的 变量和其他变量相加的时候 会把其他类型的变量自动转换为字符串类型 其实就和
System.o ...

嗯。谢谢




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