博客
关于我
Java常见错误合集
阅读量:423 次
发布时间:2019-03-06

本文共 2642 字,大约阅读时间需要 8 分钟。

null转基本类型

在Java中,null是一个特殊值,表示缺失或未赋值。将null转换为基本类型时,需要注意类型的兼容性。以下示例展示了如何将null转换为double类型:

@Data@AllArgsConstructorstatic class OneClass {    private Double value;}@Testpublic void nullToPrimitive() {    OneClass oneClass = new OneClass(1.0);    double value = oneClass.getValue(); // value是1.0    System.out.println(value); // 输出1.0    OneClass oneClass2 = new OneClass();    value = oneClass2.getValue(); // value是null    System.out.println(value); // 输出null}

运行该测试方法会输出:

1.0
null

字符串格式化中的百分号问题

在Java中,使用String.format或format方法格式化字符串时,需要注意格式说明符的使用。以下示例显示了如何正确格式化包含百分比的字符串:

@Testpublic void formatTest() {    String str = "the fee range is %.2f%%";    System.out.println(String.format(str, 1.2));}

运行该测试方法会输出:

the fee range is 1.20%

Google Cache中的null指针问题

在使用Google的Cache库时,需要注意缓存的加载方法。如果返回null值,可能会导致缓存无法正常获取数据。以下是修正后的测试方法:

@Testpublic void nullTest2() {    LoadingCache
> cache = CacheBuilder.newBuilder() .expireAfterWrite(1, TimeUnit.HOURS) .build(new CacheLoader
>() { @Override public Optional
load(String key) throws Exception { return Optional.ofNullable(null); } }); try { Optional
result = cache.get("str"); System.out.println(result.isPresent() ? result.get() : null); } catch (Exception e) { log.error("nullTest2 {}", e.getMessage(), e); }}

运行该测试方法会输出:

null

double相加的精度问题

在Java中,double类型的精度问题可能会导致结果看起来不准确。以下示例展示了如何验证double相加的精度:

@Testpublic void doubleAdd() {    System.out.println(0.3 + 0.3 + 0.3 + 0.1); // 输出0.9999999999999999    System.out.println(Double.compare(1.0, 0.3 + 0.3 + 0.3 + 0.1) == 0); // 输出false    BigDecimal bigDecimal1 = BigDecimal.valueOf(0.3)            .add(BigDecimal.valueOf(0.3))            .add(BigDecimal.valueOf(0.3))            .add(BigDecimal.valueOf(0.1));    BigDecimal bigDecimal2 = BigDecimal.valueOf(1.0);    System.out.println(bigDecimal1.compareTo(bigDecimal2) == 0); // 输出true}

运行该测试方法会输出:

0.9999999999999999
false
true

集合contains方法的类型问题

在Java中,集合的contains方法对类型比较较为严格。以下示例展示了如何测试集合中的元素是否匹配:

@Testpublic void containsTest() {    Set
set = Sets.newHashSet((byte) 1, (byte) 2, (byte) 3); System.out.println(set.contains(1)); // 输出false System.out.println(set.contains((byte) 1)); // 输出true}

运行该测试方法会输出:

false
true

Arrays.asList的列表修改问题

Arrays.asList方法返回的列表是基于原数组的不可变列表。以下示例展示了如何避免修改源数组的问题:

Integer[] integers = {0, 1, 2};List
list = Arrays.asList(integers);System.out.println(list); // 输出[0, 1, 2]integers[0] += 1;System.out.println(list); // 输出[1, 1, 2]

输出结果为:

[0, 1, 2]
[1, 1, 2]

转载地址:http://cfbuz.baihongyu.com/

你可能感兴趣的文章
Python--抽象类接口类
查看>>
PYTHON--欧拉习题二
查看>>
python--高级应用总结
查看>>
python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
查看>>
Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
查看>>
Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
查看>>
Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
查看>>
python出现 unknown encoding: idna 的处理方法
查看>>
Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
查看>>
Python-numpy(2)数组的操作
查看>>
Python-Numpy的tile函数用法
查看>>
python-open函数
查看>>
Python-Pandas-将特定函数应用于给定级别-多索引数据框架
查看>>
python-queue队列通信
查看>>
python-ros No module named PyKDL
查看>>
python-social-auth 是否需要会话
查看>>
Python再获年度编程语言,微软或成最大赢家
查看>>
python-week5
查看>>
Python写表情包搜索工具(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Python-【1】配置
查看>>