黑马程序员技术交流社区

标题: 有点发晕,关于char 与String 看这段代码 云里雾里 [打印本页]

作者: LINUS    时间: 2013-4-21 20:53
标题: 有点发晕,关于char 与String 看这段代码 云里雾里
  1. public class test5 {
  2.         public static void main(String[] agrs){
  3.                 int A=5;
  4.                 double AA=1.3;
  5.                 double sum=A+AA;
  6.                 System.out.println(sum);
  7.                 char x='男';
  8.                 char y='女';
  9.                 String z="与";
  10.                 String Sum=x+y+z;
  11.                 System.out.print(Sum);       
  12.                 }
  13. }
复制代码
咋搞的,结果咋x y 成了数字了?到底是为什么  ?  Why???????????:Q
作者: 932759732    时间: 2013-4-21 21:07
在java中基本类型可以相互转换,boolean类型比较特殊不可以转换成其他类型
转换分为默认转换和强制转换:   默认转换:容量小的类型会默认转换为容量大的类型
     byte-->short--> int-->long-->float-->double
     char-->
     byte、short、char之间计算不会互相转换,首先先转换成int

将容量大的类型转换成容量小的类型,需要进行强制转换
只要不超出范围可以将整型值直接赋值给byte,short,char
作者: 小菜凉碟    时间: 2013-4-21 21:16
关键是:String Sum=x+y+z;这一句,因为x与Y都是char类型,在运算符+的作用下会自动提升为int类型,将x与y转为对应的unicode码所对应的数字,结果为52906,然后与字符串“与”相连接变为新的字符串;
楼主可以试试把z放在三个数的开始,如String Sum1=z+x+y;      
                System.out.print(Sum1);输出结果是"与男女",因字符串"与"在运算符+的作用下将后面的x与y作为字符串相连接


作者: 小菜凉碟    时间: 2013-4-21 21:21

给你分享一下总结的有“+”的输出运算
作者: smallsea    时间: 2013-4-21 21:22
char为基本数据类型;
String为引用数据类型;
当基本数据类型要转换成引用数据类型时,都要通过他自身的父类“.”出转换方式,例如:int转换成String
作者: smallsea    时间: 2013-4-21 21:24
刚刚按了回车键,直接发出去了:
Integer.valueOf(str);str为String类型,所以:我帮你写了正确代码public static void main(String[] agrs) {

                int A = 5;

                double AA = 1.3;

                double sum = A + AA;

                System.out.println(sum);

                char x = '男';

                char y = '女';

                String z = "与";

                String Sum = Character.toString(x) + Character.toString(y) + z;

                System.out.print(Sum);
               

        }
作者: 高新星    时间: 2013-4-21 21:27
本帖最后由 高新星 于 2013-4-21 21:35 编辑
  1. class Test{
  2.                 public  static void main(String[] agrs){
  3.                         char x='男';
  4.                         char y='女';
  5.                         
  6.                         //两个字符相加,要先转换为int(自动类型转换)相加后,如果要得到char则需要强制转换
  7.                         char xy =(char) (x+y);
  8.                         int xy1 = x+y;
  9.                         System.out.println(xy);//打印:?
  10.                         System.out.println(xy1);//打印:52906
  11.                         
  12.                         String z="与";
  13.                         //x+y先运算所以得到的是int + z
  14.                         String Sum=x+y+z;
  15.                         System.out.println(Sum);       //:打印52906与
  16.                         
  17.                         //x+z就是字符x与字符串z得到字符串,再加字符y,最后得到字符串
  18.                         String Sum1=x+z+y;
  19.                         System.out.println(Sum1);//打印:男与女
  20.                  }
  21. }
复制代码

作者: 本人已死    时间: 2013-4-21 21:38
  1. package javabean;

  2. public class Demo2 {

  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub

  8. char x='男';

  9. char y='女';

  10. String z="与";
  11. //Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果
  12. System.out.print(x+y);
  13. //这里因为x+y是int类型的所以与z不能相加,x+y自动转换成字符串形式
  14. //所以输出结果是一个数字加上z
  15. System.out.print(x+y+z);

  16. }

  17. }
复制代码

作者: 极限冰风    时间: 2013-4-21 21:52
char本质上就是个8位数对应的ascii码,'a'是97 ‘b’是98。相加就是195,而你的是x 和y所以就边成了52906,
在ascii码表中有相对应的数字来对比字母,你下载个ascii码来看看就知道了
作者: 黄玉昆    时间: 2013-4-22 08:14

如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
作者: 陈湘林    时间: 2013-4-22 22:43
  1. 1字符串的长度
  2. int        length()
  3.           返回此字符串的长度。
  4.                 String s="hello";
  5.                 System.out.println(s.length());
  6. 2,字符串和字符数组间的转换
  7. char[]        toCharArray()
  8.           将此字符串转换为一个新的字符数组。

  9.                 String s="hello";
  10.                 char[] cs=s.toCharArray();
  11.                 for(int i=0;i<cs.length;i++){
  12.                         System.out.println(cs[i]);
  13.                 }
  14. 3,取出指定位置的字符
  15. char        charAt(int index)
  16.           返回指定索引处的 char 值。

  17.                 String s="abcdefg";
  18.                 System.out.println(s.charAt(3));
  19. 注意,字符串中的字符,索引是从0开始的
  20. 4,查找字符串
  21. int        indexOf(String str)
  22.           返回第一次出现的指定子字符串在此字符串中的索引。不出现返回-1

  23.                 String s="abcdefg";
  24.                 System.out.println(s.indexOf("e"));
  25. 又如
  26.                 String s="abcdefg";
  27.                 System.out.println(s.indexOf("ef"));
  28. 结果为4
  29. 5,去空格
  30. String
  31. trim()
  32.           返回字符串的副本,忽略前导空白和尾部空白。
  33.                 String s="   abcdefg   ";
  34.                 System.out.println("***"+s.trim()+"***");
  35. 6,字符串的截取
  36. String
  37. substring(int beginIndex, int endIndex)
  38.           返回一个新字符串,它是此字符串的一个子字符串。

  39.                 String s="abcdvvvefg";
  40.                 String ss=s.substring(4, 7);
  41.                 System.out.println(ss);
  42. 简记,从哪截到哪,开始索引从0开始算,结束索引从1开始算
  43. 7,拆分字符串
  44. String[]
  45. split(String s)
  46.           根据给定的字符来拆分此字符串。

  47.                 String s="计算机,音乐,电影,看书,旅游";
  48.                 String[] ss=s.split(",");
  49.                 for(int i=0;i<ss.length;i++){
  50.                         System.out.println(ss[i]);
  51.                 }
  52. 8,转换大小写
  53. String
  54. toLowerCase()
  55.           使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
  56. String
  57. toUpperCase()
  58.           使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
  59.                 String s="aBv";
  60.                 System.out.println(s.toLowerCase());
  61. 9,不区分大小写比较
  62. boolean        equalsIgnoreCase(String anotherString)
  63.           将此 String 与另一个 String 进行比较,不考虑大小写。

  64.                 System.out.println("abc".equalsIgnoreCase("ABC"));
  65. 10,替换字符串
  66. String
  67. replace(char oldChar, char newChar)
  68.           返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。

  69.                 String s="abcvvvdef";
  70.                 String ss=s.replace("vvv", "xxx");
  71.                 System.out.println(ss);
  72. 总结,学会用API文档,当成字典来用,不要死记硬背
复制代码





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