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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范国征 中级黑马   /  2014-4-17 20:47  /  1356 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于字符串

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  ?

12 个回复

倒序浏览
当你的String类型的 变量和其他变量相加的时候 会把其他类型的变量自动转换为字符串类型 其实就和
System.out.println( a + b) ;
一样的效果
回复 使用道具 举报
将int型和字符串类型数据进行运算时,int会先强制转换成字符串类型再运算
回复 使用道具 举报
^o(孤8o|狼i¤F 发表于 2014-4-17 20:49
当你的String类型的 变量和其他变量相加的时候 会把其他类型的变量自动转换为字符串类型 其实就和
System.o ...

在内存中呢?求详解
回复 使用道具 举报
b提升为String  
回复 使用道具 举报
我觉得应该是
(String)a=(String)a+(String)b
(int)2和(String)2在内存中是不一样的。后者是用编码翻译过来的。
回复 使用道具 举报
kuroro自走核炮 发表于 2014-4-17 20:58
我觉得应该是
(String)a=(String)a+(String)b
(int)2和(String)2在内存中是不一样的。后者是用编码 ...

如何加载的?
回复 使用道具 举报

应该是检测到(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:20 编辑

首先a+= b 可以看成是a = a+b;字符串在进行连接运算的时候,是先创建了一个StringBuffer对象,通过StringBuffer这个对象将a的值跟b的值串联在一起的,其实可以看成是
a = new StringBuffer().append("hello").append(2).toString();
个人理解应该是这样子。
回复 使用道具 举报
  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);
复制代码


评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
kuroro自走核炮 发表于 2014-4-17 21:08
应该是检测到(String)a+(int)b之后,自动把后面int b转型成了String b
我没记错的话int b在内存中是:000 ...

对的。利用java当中的toString方法
回复 使用道具 举报
本帖最后由 千殇轮回 于 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类型了,你的那个也差不多的
回复 使用道具 举报
^o(孤8o|狼i¤F 发表于 2014-4-17 20:49
当你的String类型的 变量和其他变量相加的时候 会把其他类型的变量自动转换为字符串类型 其实就和
System.o ...

嗯。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马