JAVA中String.valueOf()、进制转换、类型转换等相关问题分析

java中转换问题

  • 进制转换基本语句
    • 几点分析
  • String.valueOf() 方法的使用
      • 由基本数据型态转换成 String
      • 由 String 转换成 数字的基本数据型态 (...parse...())
  • Integer.valueof() 和 Integer.parseInt() 区别

进制转换基本语句

System.out.println(Integer.toBinaryString(arg0));//十进制转换为二进制
System.out.println(Integer.toOctalString(arg0));//十进制转换为八进制
System.out.println(Integer.toHexString(arg0));//十进制转换为十六进制

System.out.println(Integer.valueOf(“5”,8).toString());//八进制转换为十进制
System.out.println(Integer.valueOf(“FFFF”,16).toString());//十六进制转换为十进制
System.out.println(Integer.valueOf(“0101”,2).toString());//二进制转换为十进制

几点分析

1、在Integer类中有静态方法toBinaryString(int i)方法,此方法返回int变量的二进制表示的字符串。
同理,Integer类中也提供了toHexString(int i)方法和toOctalString(int i)方法来分别返回int变量的16进制表示和8进制表示字符串。

2、在进行进制转换时,易错点是使用变量的类型。比如以上十进制转二进制时的arg0就该是一个int型变量,如果定义的变量是String或char,就要进行类型的转换。可用到valueOf()

以蓝桥杯练习题中十六进制转八进制一题中一段代码为例

/*十六进制转化为二进制*/
         for(int i=0;i<n;i++){
             String h=in.next();
             StringBuilder tempB=new StringBuilder();
             for(int m=0;m<h.length();m++){
                 char numH=h.charAt(m);//返回某索引下的char值
                 String b=Integer.toBinaryString(Integer.valueOf(String.valueOf(numH), 16));
            
                 for(int k=b.length();k<4;k++){
                     b='0'+b;
                 }
                 tempB.append(b);
             }

分析b=Integer.toBinaryString(Integer.valueOf(String.valueOf(numH), 16));
numH是16进制的char型,要先用String.valueOf()转换成String型,再用Integer.valueOf()转换为int类型。

不同的valueOf是不一样的, 比如String中的静态方法valueOf, 有很多的重载方法, 为的是将各种类型的数据, 都转化为字符串类型
Integer(Long, Byte).valueOf也有几个重载, 是将int(long, byte)型和String 转化为Integer(Long, Byte)型, 还有一个是根据设置的进制方式, 通过字符串得到Integer(Long, Byte)值, 比如Integer(Long).valueOf(“C”, 16), 的结果都是12
Double(Float).valueOf就是将double(float)转化为Double(Float).

valueOf的作用以String.valueOf() 为例:

String.valueOf() 方法的使用

由基本数据型态转换成 String

String.valueOf()参数是多载的,有以下几种:
1、String.valueOf(double d) : 将 double 变量 d 转换成字符串
2、String.valueOf(float f) : 将 float 变量 f 转换成字符串
3、String.valueOf(int i) : 将 int 变量 i 转换成字符串
4、String.valueOf(long l) : 将 long 变量 l 转换成字符串
5、String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString()
6、String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
7、String.valueOf(char c) : 将 char 变量 c 转换成字符串
8、String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
9、String.valueOf(char[] data, int offset, int count) :
将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串
用法如:
int i = 10;
String str = String.valueOf(i);
这时候 str 就会是 “10”

由 String 转换成 数字的基本数据型态 (…parse…())

需要使用基本数据型态的包装类别
比如说 String 转换成 byte
可以使用 Byte.parseByte(String s)
这一类的方法如果无法将 s 分析 则会丢出 NumberFormatException

1、byte :
Byte.parseByte(String s) : 将 s 转换成 byte
Byte.parseByte(String s, int radix) : 以 radix 为基底 将 s 转换为 byte

这个地方int radix 是指的基数 ,就是指的进制基数
比如说 Byte.parseByte(“11”, 16) 会得到 17
b[0] = Byte.parseByte(“11”, 2) = 3
表示 字符串11以2为基数表示为10进制的byte值是 3 ,这里的11表示的是一个2进制数
b[0] = Byte.parseByte(“11”, 3) = 4
表示 字符串11以3为基数表示为10进制的byte值是 4 ,这里的11表示的是一个3进制数
如果你给的string 不能转换,或者基数小于2或大于36 会抛出异常

b[0] = Byte.parseByte(“12”, 2) // 2 进制中只有1和0
b[0] = Byte.parseByte(“12”, 1) // 基数应该在 1

2、double :
Double.parseDouble(String s) : 将 s 转换成 double
3、float :
Double.parseFloat(String s) : 将 s 转换成 float
4、int :
Integer.parseInt(String s) : 将 s 转换成 int
5、long :
Long.parseLong(String s) :将 s 转换成Long

最常用的类型转换是String和int之间的转换。
将 String 转为 int 时:
1、Integer.parseInt(String s)
2、Integer.valueOf(String s)
将 int转为 String时:
1、String.valueOf(int i)

Integer.valueof() 和 Integer.parseInt() 区别

Integer.valueof() 和 Integer.parseInt() 的底层都是用的Integer.parseInt(String s ,int radix)这个方法。在这里给这个方法做一下解释。
https://www.cnblogs.com/juihai/p/8948508.html

Integer.parseInt(String s ,int radix),radix用来表示传进来的值是什么进制的,并返回10进制的 int 类型的结果。

比如Integer.parseInt(“A”,16),则输出结果为10进制的10,其中16表示"A"是一个16进制的值。

你可能感兴趣的:(基础但易错的编程问题,java,进制转换,类型转换)