int转换char的正确姿势详解编程语言
一:背景
在一个项目中,我需要修改一个全部由数字(0~9)组成的字符串的特定位置的特定数字,我采用的方式是先将字符串转换成字符数组,然后利用数组的位置来修改对应位置的值。代码开发完成之后,发现有乱码出现([]),经过排查发现,我将数字(0~9)转换成字符的姿势不对,现记下一笔,以加深印象。
二:错误的使用方式
如下代码所示,直接将int类型的数字直接转换成了char类型的数据,就会出现如(图-1)所示的情况
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i i++){ char c = (char)i; System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); }
图-1
三:正确的使用方式
后来发现字符类提供了对应的转换方法,如下代码所示,执行效果,如(图-2)所示
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i =sum; i++){ char c = Character.forDigit(i,10); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); }
当然了,如果,我们的前提条件是,只是将(0~9)这是十个int类型的数字转为其对应的字符表示形式的话,除了使用字符类提供的方法也有别选择,比如,下面的简单处理方式
方式2:int- String-char
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i =sum; i++){ char c = String.valueOf(i).charAt(0); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); }
方式3:直接通过字符数字表现形式所对应的数字来转换
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i =sum; i++){ char c = (char)(0 + i); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); }
方式4:和方式3一样的道理
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i =sum; i++){ char c = (char)(48+ i); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); }
四:问题
使用int直接转换为char的方式为什么不对哪?
嗯,要回答这个问题需要弄明白char的本质了
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
char: The char data type is a single 16-bit Unicode character. It has a minimum value of /u0000 (or 0) and a maximum value of /uffff (or 65,535 inclusive).
char这种简单的java数据类型特点如下:
1:是java语言中8种基本数据类型中的一种
2:它占两个字节十六位
3:最小值是0,最大值是65535
4:它可以通过单引号包装起来表示,比如:‘1’、‘A’、‘中’,也可以使用0~65535十进制(其他进制的数也可以)的整数表示,也可以使用‘/u0000’~ /uffff 表示
5:它的默认值是 /u0000 (或者0)
6:只能是单个字符,多了,没有都不行(空格也是一种字符)
当使用int类型的数据强转为char类型数据的时候,由于int数据类型是占四个字节的数据,(当int的值不在char类型的范围的时候会失去一定位数)此时char类型的数据值是int类型的值所对应的Unicode编码表中所对应的字符。
五:其他
如下简单代码实例和运行结果,恰好印证了我们以上的观点
public class TestChar4 { public static void main(String []args){ System.out.println(1); System.out.println(A); System.out.println(中); System.out.println( ); //System.out.println();//编译错误,空字面量 //System.out.println(美国);//编译错误,字符太多了,对于字符字面量而言 char max = (char)(Character.MAX_VALUE+1); System.out.println(max); char min = (char)(Character.MIN_VALUE-1); System.out.println(min); char a = 49; System.out.println(a); char b = 65535; //char b1 = 65536;//编译不通过,报必须是char类型的却发现为int类型的 System.out.println(b); char c = 0; //char c1 = -1;//编译不通过,报必须是char类型的却发现为int类型的 System.out.println(c); char d = 1+1; System.out.println(d); char e = 1+1; System.out.println(e); char f = 国+1; System.out.println(f); }
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/16617.html
cjavaoracle相关文章
- struts2(三)之表单参数自动封装与参数类型自动转换详解编程语言
- python 转换数字为钱数详解编程语言
- Java版 数字金额大写转换详解编程语言
- 将图片转换为base64字符串Java代码详解编程语言
- Java工具类:全角半角相互转换详解编程语言
- java中全角半角字符的相互转换详解编程语言
- java对字符串的全角->半角,半角->全角转换详解编程语言
- C 获取当前日期时间并转换UNIX时间戳详解编程语言
- hibernate04–三种状态之间的转换详解编程语言
- Akka(7): FSM:通过状态变化来转换运算行为详解编程语言
- java 时间戳与日期字符串相互转换详解编程语言
- Java中Date日期字符串格式的各种转换详解编程语言
- Java 经典实例: Unicode字符和String之间的转换详解编程语言
- 变量 转换详解编程语言
- JSON字符串转换为Map详解编程语言
- sap unix timestamp转换详解编程语言
- jquery json对象转换详解编程语言
- BDC中日期和数量格式的转换处理详解编程语言
- LeetCode 0109 有序链表转换二叉搜索树详解编程语言
- 算法练习之将有序数组转换为二叉搜索树,平衡二叉树详解编程语言