java中的for循環裏面創建對象和for循環外面創建對象之間的區別

List<DriverTrack> driverTracks = driverService.selectDriverTrackByExample(example);
List<TrackVo> list = new ArrayList<TrackVo>();

TrackVo trackVo = new TrackVo();

if (driverTracks != null && driverTracks.size() > 0) {
for (DriverTrack driverTrack : driverTracks) {
trackVo.setLat(driverTrack.getLatitude());
trackVo.setLng(driverTrack.getLongitude());
list.add(trackVo);
}
}

上面的代碼是我查詢的司機軌跡在driverTracks中,然後我只想獲取軌跡的經緯度放入到trackVo對象中,因爲有多個經緯度,所以使用了List容器包含trackVo對象。

我當時想的時候把這個保存經緯度的對象在for循環外面創建,不放入到for裏面。那麼就不會消耗那麼多的內存。如上,但是後面我發現我的list集合中的所有的經緯度都是同一個

而且是最後一個。一直不明白怎麼回事?

原來是在for循環外面創建的對象是同一個對象,當我在for循環裏面改了的這個對象值的時候,那些添加到list集合中的trackVo由於是同一個對象,所以那些加入到list中的對象的值也會隨着改變,所以這中只能在for裏面,每次創建一個對象。如下

List<DriverTrack> driverTracks = driverService.selectDriverTrackByExample(example);
List<TrackVo> list = new ArrayList<TrackVo>();
if (driverTracks != null && driverTracks.size() > 0) {
for (DriverTrack driverTrack : driverTracks) {
TrackVo trackVo = new TrackVo();
trackVo.setLat(driverTrack.getLatitude());
trackVo.setLng(driverTrack.getLongitude());
list.add(trackVo);
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章