有关java的引用传递,直接操作对象本身。直接删除BE的value中某值

HashSet<String> refRegions = BE.get(regionName);
   HashSet<String> values = new HashSet<String>();
   values.addAll(refRegions);
   
   if(values.contains("AllValues")){
    refRegions.clear();
    refRegions.add("AllValues");
   }
   else{
    for(String region : values){
     
     refRegions.remove(region);
     String[] regionFormat = region.split("_");
     if(regionFormat.length==2)
      region = regionFormat[1];
     else region = regionFormat[0];
     String key;
     String value;
     switch(region.length()){
     case 2: value=countryName+"_"+region;
       refRegions.add(value); break;
     case 4: value=provinceName+"_"+region;
       key=countryName+"_"+region.substring(0, 2);
       this.addClause(key, value);break;
     case 6: value=cityName+"_"+region;
       key=provinceName+"_"+region.substring(0, 4);
       this.addClause(key, value);break;
     default: value=townName+"_"+region;
       key=cityName+"_"+region.substring(0, 6);
       this.addClause(key, value);break;
     }
    }
   }

代码中,注意,refRegions,并为初始化一个空间,而是直接作为引用指向BE中regionName对应的value。此时,操作refRegions,就是直接操作BE的value,所以:

refRegions.remove(region);相当于,BE.get(regionName).remove(region)

而this.addClause(key, value) 是直接操作BE得到的结果。

从中看出,java引用传递,会直接操作对象本身

你可能感兴趣的:(java)