1. 测试用例如下:
```
@Test
public void test1(){
Object value = 23;
logger.info("object1={};object2={}", Integer.parseInt(String.valueOf(value)), (Integer)value);
Object value1 = 23.32;
logger.info("object1={};object2={}", Double.parseDouble(String.valueOf(value1)), (Double)value1);
logger.info("String.valueOf(23) = {}", String.valueOf(value));
logger.info("String.valueOf(23.32) = {}", String.valueOf(value1));
logger.info("object1={}", String.valueOf(value).contains(".")?Double.parseDouble(String.valueOf(value)):Integer.parseInt(String.valueOf(value)));
logger.info("object2={}", String.valueOf(value1).contains(".")?Double.parseDouble(String.valueOf(value1)):Integer.parseInt(String.valueOf(value1)));
logger.info("object1={}", String.valueOf(value).contains(".")?(Double)value:(Integer)value);
logger.info("object2={}", String.valueOf(value1).contains(".")?(Double)value1:(Integer)value1);
if(String.valueOf(value).contains(".")){
logger.info("String.valueOf1(value):{}", String.valueOf(value));
}else{
logger.info("String.valueOf2(value):{}", String.valueOf(value));
}
if(String.valueOf(value).contains(".")){
logger.info("convert1(value):{}", (Double)value);
}else{
logger.info("convert2(value):{}", (Integer)value);
}
}
```
2. 输出如下:
```
22:06:54.523 [main] INFO com.tikie.eureka.core.NormalTest - object1=23;object2=23
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - object1=23.32;object2=23.32
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - String.valueOf(23) = 23
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - String.valueOf(23.32) = 23.32
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - object1=23.0
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - object2=23.32
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - object1=23.0
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - object2=23.32
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - String.valueOf2(value):23
22:06:54.528 [main] INFO com.tikie.eureka.core.NormalTest - convert2(value):23
```
3. 为何同样的调用,有两个输出多了".0"??
是因为这个三目运算符?: 的影响,这个冒号两边的数据类型要保持一致,Java自动把后面那个转成double类型了,你看下编译的class文件就知道
你如果写成if-else的形式,就不会出现这个问题
要先看懂三木运算,带0是因为在输出前,先将23转成了double类型23.0,然后输出的时候又转的字符串,
另一个没有就是因为先23.32先转成int整型,变成了23,在转string的时候就没有0了
@soar3033
不是这个原因,不然下边这个为啥不是加.的
logger.info("String.valueOf2(value):{}", String.valueOf(value));
@90e家
说对了四分之一;错了后半句;23.32没有转成23!
@qq_25376897
本题的重点是:三目运算会强制把后边的数据类型保持一致,正解
因为三目运算把前面的类型转换成后面的类型,所以多输出“.0”