49条基本类型优先于装箱基本类型

本文深入探讨了Java中装箱类型与基本类型之间的关键区别,包括同一性比较、自动拆箱机制、性能考量以及何时必须使用装箱类型。通过具体示例,阐述了使用装箱类型时可能遇到的问题,如NullPointerException和高开销,并提供了改进方案。重点强调了自动装箱的便利性与潜在风险,帮助开发者在实际应用中做出明智选择。

这里作者举了几个例子,装箱类型,是一个对象,对于Integer来说,默认是null,不是我们想象中的默认 0 ,int 才是默认 0 

原文说三个区别:

一、基本类型只有值,装箱类型除了值之外还有与他们的值不同的同一性(这个估计是说,装箱类型作为对象的不同,尤其在相等比较的时候,下面会有例子)

二、基本类型只有功能完备的值,装箱类型除了对应的基本类型所有值之外还有个非功能值,那就是null,因为它是对象啊

三、基本类型比装箱要节省时间空间

第一个例子:定义这样的一个比较器。

import java.util.Comparator;


public class TestComparator {
static Comparator<Integer> naturalOrder = new Comparator<Integer>() {


@Override
public int compare(Integer first, Integer second) {
return first < second ? -1 : (first == second ? 0 : 1);
}
};


public static void main(String[] args) {
int result = naturalOrder.compare(new Integer(42), new Integer(42));
System.err.println(result);
}
}

这个程序打印出来的结果是1,

(first == second ? 0 : 1 )先在两个对象引用上执行同一性比较,如果first和second引用表示同一个值的不同Integer实例,就返回false


所以记住:


对装箱基本类型运用 == 操作符几乎总是错误的。


对于这个程序的改进就是定义局部变量,先拆箱,也可以避免大量的同一性比较。



第二个例子:


public class Unbelievable {
static Integer i;
public static void main(String[] args) {
if(i == 42){
System.out.println("Unbelievable");
}
}


}


这个程序,打印不处理Unbelievable,但是会报空指针一次,因为i没有初始化,默认null,

作者说:当在一项操作中混合使用基本类型和装箱基本类型时,装箱基本类型会自动拆箱。 i==42,会自动拆箱

当对null自动拆箱,就会报空指针异常。


第三个例子:


public static void main(String[] args) {
Long sum = 0L;
long start = System.currentTimeMillis();
for(long i = 0; i < Integer.MAX_VALUE; i++){
sum += i;
}
long end = System.currentTimeMillis();
System.err.println(sum);
System.err.println("用时" + (end - start) + "ms");

long sum2 = 0L;
start = System.currentTimeMillis();
for(long i = 0; i < Integer.MAX_VALUE; i++){
sum2 += i;
}
end = System.currentTimeMillis();
System.err.println(sum2);
System.err.println("用时" + (end - start) + "ms");

}

2305843005992468481
用时18436ms
2305843005992468481
用时4123ms


结果发现,第一个定义sum是装箱类型,用时要多,所以不好,编译器不会报错和警告,但是我们要注意不要这么用。



然后,作者说什么时候必须使用装箱类型呢? 一、作为集合中的元素,键,值 ,要求必须是对象,没有办法,只有有装箱类型

二、参数化,就是泛型的时候也必须是装箱。

总结一下:

自动装箱减少了使用装箱基本类型的繁琐性,但是并没有减少他的风险。

==操作和NullPointerException我们都看到了,还有就是装箱基本类型,导致高开销和不必要的对象创建。


成都市作为中国西部地区具有战略地位的核心都市,其人口的空间分布状况对于城市规划、社会经济发展及公共资源配置等研究具有基础性数据价值。本文聚焦于2019年度成都市人口分布的空间数据集,该数据以矢量格式存储,属于地理信息系统中常用的数据交换形式。以下将对数据集内容及其相关技术要点进行系统阐述。 Shapefile 是一种由 Esri 公司提出的开放型地理空间数据格式,用于记录点、线、面等几何要素。该格式通常由一组相互关联的文件构成,主要包括存储几何信息的 SHP 文件、记录属性信息的 DBF 文件、定义坐标系统的 PRJ 文件以及提供快速检索功能的 SHX 文件。 1. **DBF 文件**:该文件以 dBase 表格形式保存与各地理要素相关联的属性信息,例如各区域的人口统计数值、行政区划名称及编码等。这类表格结构便于在各类 GIS 平台中进行查询与编辑。 2. **PRJ 文件**:此文件明确了数据所采用的空间参考系统。本数据集基于 WGS84 地理坐标系,该坐标系在全球范围内广泛应用于定位与空间分析,有助于实现跨区域数据的准确整合。 3. **SHP 文件**:该文件存储成都市各区(县)的几何边界,以多边形要素表示。每个多边形均配有唯一标识符,可与属性表中的相应记录关联,实现空间数据与统计数据的联结。 4. **SHX 文件**:作为形状索引文件,它提升了在大型数据集中定位特定几何对象的效率,支持快速读取与显示。 基于上述数据,可开展以下几类空间分析: - **人口密度评估**:结合各区域面积与对应人口数,计算并比较人口密度,识别高密度与低密度区域。 - **空间集聚识别**:运用热点分析(如 Getis-Ord Gi* 统计)或聚类算法(如 DBSCAN),探测人口在空间上的聚集特征。 - **空间相关性检验**:通过莫兰指数等空间自相关方法,分析人口分布是否呈现显著的空间关联模式。 - **多要素叠加分析**:将人口分布数据与地形、交通网络、环境指标等其他地理图层进行叠加,探究自然与人文因素对人口布局的影响机制。 2019 年成都市人口空间数据集为深入解析城市人口格局、优化国土空间规划及完善公共服务体系提供了重要的数据基础。借助地理信息系统工具,可开展多尺度、多维度的定量分析,从而为城市管理与学术研究提供科学依据。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值