src/hotspot/share/classfile/javaClasses.cpp
changeset 48620 7f97d35fac6e
parent 48619 1703d83b3ffe
parent 48618 688e5cbd0b91
child 48814 f01f81fa1242
equal deleted inserted replaced
48619:1703d83b3ffe 48620:7f97d35fac6e
   626 }
   626 }
   627 
   627 
   628 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
   628 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
   629   assert(java_string->klass() == SystemDictionary::String_klass(),
   629   assert(java_string->klass() == SystemDictionary::String_klass(),
   630          "must be java_string");
   630          "must be java_string");
   631   typeArrayOop value  = java_lang_String::value(java_string);
   631   typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
   632   int          length = java_lang_String::length(java_string);
   632   int length = java_lang_String::length(java_string);
   633   if (length != len) {
   633   if (length != len) {
   634     return false;
   634     return false;
   635   }
   635   }
   636   bool      is_latin1 = java_lang_String::is_latin1(java_string);
   636   bool is_latin1 = java_lang_String::is_latin1(java_string);
   637   if (!is_latin1) {
   637   if (!is_latin1) {
   638     for (int i = 0; i < len; i++) {
   638     for (int i = 0; i < len; i++) {
   639       if (value->char_at(i) != chars[i]) {
   639       if (value->char_at(i) != chars[i]) {
   640         return false;
   640         return false;
   641       }
   641       }
   653 bool java_lang_String::equals(oop str1, oop str2) {
   653 bool java_lang_String::equals(oop str1, oop str2) {
   654   assert(str1->klass() == SystemDictionary::String_klass(),
   654   assert(str1->klass() == SystemDictionary::String_klass(),
   655          "must be java String");
   655          "must be java String");
   656   assert(str2->klass() == SystemDictionary::String_klass(),
   656   assert(str2->klass() == SystemDictionary::String_klass(),
   657          "must be java String");
   657          "must be java String");
   658   typeArrayOop value1  = java_lang_String::value(str1);
   658   typeArrayOop value1    = java_lang_String::value_no_keepalive(str1);
   659   int          length1 = java_lang_String::length(str1);
   659   int          length1   = java_lang_String::length(value1);
   660   bool       is_latin1 = java_lang_String::is_latin1(str1);
   660   bool         is_latin1 = java_lang_String::is_latin1(str1);
   661   typeArrayOop value2  = java_lang_String::value(str2);
   661   typeArrayOop value2    = java_lang_String::value_no_keepalive(str2);
   662   int          length2 = java_lang_String::length(str2);
   662   int          length2   = java_lang_String::length(value2);
   663   bool       is_latin2 = java_lang_String::is_latin1(str2);
   663   bool         is_latin2 = java_lang_String::is_latin1(str2);
   664 
   664 
   665   if ((length1 != length2) || (is_latin1 != is_latin2)) {
   665   if ((length1 != length2) || (is_latin1 != is_latin2)) {
   666     // Strings of different size or with different
   666     // Strings of different size or with different
   667     // coders are never equal.
   667     // coders are never equal.
   668     return false;
   668     return false;
   669   }
   669   }
   670   int blength1 = value1->length();
   670   int blength1 = value1->length();
   671   for (int i = 0; i < value1->length(); i++) {
   671   for (int i = 0; i < blength1; i++) {
   672     if (value1->byte_at(i) != value2->byte_at(i)) {
   672     if (value1->byte_at(i) != value2->byte_at(i)) {
   673       return false;
   673       return false;
   674     }
   674     }
   675   }
   675   }
   676   return true;
   676   return true;
   677 }
   677 }
   678 
   678 
   679 void java_lang_String::print(oop java_string, outputStream* st) {
   679 void java_lang_String::print(oop java_string, outputStream* st) {
   680   assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
   680   assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
   681   typeArrayOop value  = java_lang_String::value(java_string);
   681   typeArrayOop value  = java_lang_String::value_no_keepalive(java_string);
   682 
   682 
   683   if (value == NULL) {
   683   if (value == NULL) {
   684     // This can happen if, e.g., printing a String
   684     // This can happen if, e.g., printing a String
   685     // object before its initializer has been called
   685     // object before its initializer has been called
   686     st->print("NULL");
   686     st->print("NULL");