我们究竟需要使用类型转换?

时间:2017-10-03 12:30:40

标签: java casting

void test() {
    String s1 = "1";
    //int i1 = int(s1); -- compilation error
    int i1 = Integer.parseInt(s1);

    long l1 = 1;
    int i2 = (int) l1;
}

何时使用Integer.parseInt转换为Integer以及何时仅使用int转换为Integer

3 个答案:

答案 0 :(得分:4)

从孩子到父母的投射(向下投射)或反之亦然(向上投射):

class A extends B
B b = (B)(new A());

或在接口的情况下:

List<String> myList = new ArrayList<>();
ArrayList<String> myArrayList = (ArrayList)myList;

或原语之间 - 你的情况。

您可以决定将long转换为int,反之亦然。

解析在某种程度上是不同的。你接受一个与数字类型无关的String,并声明你希望try将它解析成一个数字。

您坚信String只有数字(在任何一个数字系统中,直到16),并且您希望将该数字用作数字变量。

specification chapter 5广泛描述了这种机制。根据基元进行转换可以代表两种操作之一:扩展基本转换缩小基本转换

扩展原始转换

有19种可能的扩展原始转换。拓宽意味着从较小的类型变为更大的类型。

+-----------+-------+------+-------+-------+--------+
|           | short |  int |  long | float | double |
| short ->  |       | x    | x     | x     | x      |
| int ->    |       |      | x     | x     | x      |
| long ->   |       |      |       | x     | x      |
| float ->  |       |      |       |       | x      |
| double -> |       |      |       |       |        |
+-----------+-------+------+-------+-------+--------+

您可以了解后果here

缩小原始转换次数

+-----------+------+------+-------+------+-------+-------+--------+
|           | byte | char | short |  int |  long | float | double |
| byte ->   |      |      |       |      |       |       |        |
| char ->   |      |      |       |      |       |       |        |
| short ->  | x    | x    |       |      |       |       |        |
| int ->    | x    | x    | x     |      |       |       |        |
| long ->   | x    | x    | x     | x    |       |       |        |
| float ->  | x    | x    | x     | x    | x     |       |        |
| double -> | x    | x    | x     | x    | x     | x     |        |
+-----------+------+------+-------+------+-------+-------+--------+

后果描述为here

转换

描述了转化转化here。它们包括所有可能的强制转换,包括字符串转换,当使用+操作数用于String和非字符串时使用。

答案 1 :(得分:0)

int原始类型。因此,它没有任何构造函数,更不用说来自java.lang.String的构造函数。所以int i1 = int(s1);毫无意义。

幸运的是,盒装模拟Integer包含一个静态方法parseInt,它产生int并取java.lang.String。正是你想要的!

答案 2 :(得分:0)

Integer.parseInt是解析String并创建预期类型的​​值,在这种情况下它实际上不会投射。

转换是将一个类的实例转换为另一个类(或原始类型转换为另一个类)