char类型和int型可以通用

时间:2023-01-08 12:56:02

今天写一个问题的时候惊奇的发现char类型和int类型数值在 0-255之内的可以通用

如下的代码

package test;
import java.util.Scanner;

/**
* Created by Administrator on 2016/10/8.
*/

public class Main {
/*找出字符串中第一个只出现一次的字符
*详细描述:
*接口说明
*原型:
*bool FindChar(char* pInputString, char* pChar);
*输入参数:
*char* pInputString:字符串
*输出参数(指针指向的内存区域保证有效):
*char* pChar:第一个只出现一次的字符
*如果无此字符 请输出'.'
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String st=sc.nextLine();
if(st.trim().length()>0 ){
findChar(st);
}


}
public static void findChar(String st){
char[] ch=new char[256]; //共有256个字符,给所有字符预留空间,默认初始值是ASCII的0(int);char类型会自动转换成(int型)ASCII进行算术运算
/*char类型数组默认的是int 型的ASCII 0;
*int 类型数组默认的也是0。所以有时候int 型和char类型数组可以通用。
*并且默认的char 类型会自动转换成int 型的ASCII进行算术运算。
*
* */
for(int i=0;i<st.length();i++)
{
int x=st.charAt(i);//char类型可以自动转换成对应ASCII的int型
ch[st.charAt(i)]++;//统计每个字符出现次数 ,st.charAt(i)即字符数组下标,ch[st.charAt(i)]即为出现次数,因为默认值是ASCII的0

}

for(int i=0;i<st.length();i++){
if(ch[st.charAt(i)]==1){ //如果对应的字符只出现一次,则输出并结束循环
System.out.println(st.charAt(i));
break;
}
if(ch[st.charAt(i)]!=1 && i==st.length()-1 ){ //如果没有出现只有一次的字符,输出 .
System.out.println("."); //如果不输出 . 会报错,严格按要求
}
}
}
}
此时的char类型数组可以改成int型数组

char类型默认存放的是ASCII 为0的空字符(注意和空格不一样)。并且可以自动转换成ASCII的int型进行算术运算。