黑马程序员技术交流社区

标题: 第24行为为什么String类型的和int 类型的数可以相加? [打印本页]

作者: 陈迎春    时间: 2013-2-24 00:16
标题: 第24行为为什么String类型的和int 类型的数可以相加?
本帖最后由 海阔天kong 于 2013-2-24 00:18 编辑
  1. package cn.itcast.demo1;



  2. /**
  3. * 生产者,消费者
  4. *
  5. * */

  6. class Resource
  7. {
  8.         private String name;
  9.         private int count = 1;
  10.         private boolean flag = false;
  11.         public synchronized void set(String name)
  12.         {
  13.                 while(flag)
  14.                         try {
  15.                                 wait();
  16.                         } catch (InterruptedException e) {
  17.                                 // TODO 自动生成的 catch 块
  18.                                 e.printStackTrace();
  19.                         }
  20.                 this.name = name+count;//<font size="5" color="#ff0000">为什么String类型的和int类型的数可以相加?</font>
  21.                 count++;
  22.                 System.out.println(Thread.currentThread().getName()+"...生产者......."+this.name);
  23.                 flag = true;
  24.                 notifyAll();
  25.         }
  26.         public synchronized void out()
  27.         {
  28.                 while(!flag)
  29.                         try {
  30.                                 wait();
  31.                         } catch (InterruptedException e) {
  32.                                 // TODO 自动生成的 catch 块
  33.                                 e.printStackTrace();
  34.                         }
  35.                 System.out.println(Thread.currentThread().getName()+"...消费者..."+this.name);
  36.                 flag = false;
  37.                 notifyAll();
  38.         }
  39. }

  40. class Producer implements Runnable
  41. {
  42.          private Resource r ;
  43.          Producer(Resource r)
  44.          {
  45.                  this.r = r;
  46.          }
  47.         @Override
  48.         public void run() {
  49.                 // TODO 自动生成的方法存根
  50.                 while(true)
  51.                 r.set("烤鸭");
  52.                
  53.         }
  54. }

  55. class Consumer implements Runnable
  56. {
  57.          private Resource r ;
  58.          Consumer(Resource r)
  59.          {
  60.                  this.r = r;
  61.          }
  62.         @Override
  63.         public void run() {
  64.                 // TODO 自动生成的方法存根
  65.                 while(true)
  66.                 {
  67.                         r.out();
  68.                 }
  69.         }
  70. }

  71. public class ProducerConsumer {

  72.         /**
  73.          * @param args
  74.          */
  75.         public static void main(String[] args) {
  76.                 // TODO 自动生成的方法存根
  77.                 Resource r = new Resource();
  78.                 Producer pro = new Producer(r);
  79.                 Consumer con = new Consumer(r);
  80.                
  81.                 Thread t0 = new Thread(pro);
  82.                 Thread t1= new Thread(pro);
  83.                 Thread t2 = new Thread(con);
  84.                 Thread t3 = new Thread(con);
  85.                 t0.start();
  86.                 t1.start();
  87.                 t2.start();
  88.                 t3.start();

  89.                
  90.         }

  91. }
复制代码

作者: 谢波    时间: 2013-2-24 00:28
加号除了用于数字型数据据的加法运算外
还可以用于连接字符串
如:String str = "你好" + 4; //+可以将4转换成String
System.out.println(str);结果是:你好4
这其中涉及到数据类型的转换
字符串和基本数据类型相加隐式的把基本数据类型转换成字符串型
作者: 王昕    时间: 2013-2-24 00:39
本帖最后由 王昕 于 2013-2-24 00:42 编辑

因为运算符重载,就像方法重载。方法重载根据参数决定到底使用同名方法中的哪一个,运算符重载根据操作数决定使用运算符的哪种含义。
“+”是Java中唯一重载过的运算符。你可以当它是两种运算符,只不过样子一样,具体含义取决于两边的操作数类型。
作者: 邢义敏    时间: 2013-2-24 07:35
这里的运算也可以说是:
基本数据类型转成字符串。
它的格式:1、基本数据类型+""
2、基本数据类型.toString(基本数据类型值);

出现在代码中的显然是第一种,也就是说,name+count的结果是一个String类型的字符串

        如: Integer.toString(34);//将34整数变成"34";


作者: 陈圳    时间: 2013-2-24 10:47
+不仅可以用于基础类型运算,也可以用于Stirng对象连接.
String str="";
str+=4;//str="4";
而System.out.println()中打印出来的结果也是进行这种运算的.

作者: 王小丑    时间: 2013-2-24 14:49
+ 一个作用是运算符,第二个作用是作为字符串连接符,你不要把String类型的和int 类型的数理解成了相加的运算,其实是把这个int型的数据变成了一个string数据,与前面的string连起来了
作者: 张宁    时间: 2013-2-25 15:49
这是一个连接符,4 就自动转换成string类型了。
作者: 陈迎春    时间: 2013-2-25 17:02
谢波 发表于 2013-2-24 00:28:11
加号除了用于数字型数据据的加法运算外
还可以用于连接字符串
如:String str = "你好" + 4; //+可以将4转换成String
System.out.println(str);结

int a =4;
System. out. print ((String )a);
这样把 int型的a 强制转换按理是不是就可以啦?
作者: 陈迎春    时间: 2013-2-25 17:02
谢波 发表于 2013-2-24 00:28:11
加号除了用于数字型数据据的加法运算外
还可以用于连接字符串
如:String str = "你好" + 4; //+可以将4转换成String
System.out.println(str);结

int a =4;
System. out. print ((String )a);
这样把 int型的a 强制转换按理是不是就可以啦?
作者: 何伟    时间: 2013-2-25 20:48
这里的+是连接符的意思就是把+前后的连接在一起




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