黑马程序员技术交流社区

标题: String类问题 [打印本页]

作者: 李林轩    时间: 2012-1-7 22:43
标题: String类问题
返回指定字符在此字符串中第一次出现处的索引中indexOf(int ch)方法参数为什么是int型呢?不是传入的是一个char型的字符吗?

作者: 苏格拉底的弟子    时间: 2012-1-7 22:53
以前我也有过同样的问题啊,,就是一直想不通,,,   类型都不一样 ,怎么能传了..

后来才明白,因为这是用ascii编码来给char赋值 ,所以Java当中char类型是可以给int类型赋值的。
作者: 林晓波    时间: 2012-1-7 23:02
char与Int可以互转
作者: zl918    时间: 2012-1-7 23:30
在Java当中char类型是可以给int类型赋值的,是可以相互赋值的
首先int类型32个位(1个符号位+31个数值位) char类型16个位(16个数值位)
char data = 97;这样的赋值是没有错误的 这是用ascii编码来给char赋值
楼主问题是从char到int的自动提升 在Java当中 一个较小数据类型是直接可以赋值给大数据类型的而且在参数传递的时候同理,你可以写这样一行代码:
    int data = 'a'; //或者:
    char c = 'e';
       int i = c;//这样的赋值也没有错误
所以Java当中在参数匹配的时候是可以用char类型参数匹配int类型参数的定义的
s1.indexOf('e')等价于s1.indexOf(101) 在这里用e的ASCII编码来匹配int类型参数

另外,当你把一个方法定义成double类型参数的时候 byte short char int long float 类型的变量都可以匹配这个方法的参数,你可以试试看....
作者: 黄秋    时间: 2012-1-8 05:21
  这个是每种语言对于引号的规则不同,javascript对于单双引号,一样处理;php虽然单双引号都表示字符串,但处理不同(双引号里面的经编译器解释,处理转义,单引号不)。说到JAVA了,双引号表示字符串,单引号表示单个字符。
  如:String s='abc'; 编译出错,在某些语言是行的;String s='a';也报错“不兼容的类型”,因JAVA是强类型语言,要检查类型。char ch='a'; String s="abc"; 才是对的。
作者: 黄秋    时间: 2012-1-8 05:43
测试java对单引号的处理
  1. public class Test{       
  2.         public static void main(String[] args){
  3.                 char ch1='a';
  4.                 char ch2=97;
  5.                 String s="abc";               
  6.                 System.out.println(ch1);
  7.                 System.out.println(ch2);
  8.                 System.out.println(ch2==ch1);
  9.                 System.out.println(s.indexOf('a'));               
  10.                 System.out.println(s.indexOf(97));               
  11.         }
  12. }
复制代码
可见,对于JVAA,'a'即是97,97就是'a',当然类型不同,但多数时候java会自动转换。
作者: 王杰    时间: 2012-1-8 12:02
本帖最后由 苳眠 于 2012-1-8 12:02 编辑

indexOf(int ch)中的ch用int类型是因为传进去的参数是ASCII码,
ASCII码是一种编码方式.他编码了所有的大小写字母,数字和常用的符号.小写的a的ASCII码是97;大写的A的ASCII码是65.
这个还是有些规律的比如知道a的编码是97,那么b的编码就是98.....以此类推.




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