code: @Override
      public boolean hasSameRules(TimeZone other) {
          if (this == other) {
              return true;
          }
          // The super class implementation only check raw offset and
          // use of daylight saving time.
          if (!super.hasSameRules(other)) {
              return false;
          }
  
          if (!(other instanceof OlsonTimeZone)) {
              // We cannot reasonably compare rules in different types
              return false;
          }
  
          // Check final zone
          OlsonTimeZone o = (OlsonTimeZone)other;
          if (finalZone == null) {
              if (o.finalZone != null) {
                  return false;
              }
          } else {
              if (o.finalZone == null
                      || finalStartYear != o.finalStartYear
                      || !(finalZone.hasSameRules(o.finalZone))) {
                  return false;
              }
          }
          // Check transitions
          // Note: The code below actually fails to compare two equivalent rules in
          // different representation properly.
          if (transitionCount != o.transitionCount ||
                  !Arrays.equals(transitionTimes64, o.transitionTimes64) ||
                  typeCount != o.typeCount ||
                  !Arrays.equals(typeMapData, o.typeMapData) ||
                  !Arrays.equals(typeOffsets, o.typeOffsets)){
              return false;
          }
          return true;
      }
docs: /* (non-Javadoc)
  @see android.icu.util.TimeZone#hasSameRules(android.icu.util.TimeZone)