src/hotspot/share/classfile/javaClasses.cpp
changeset 48618 688e5cbd0b91
parent 47998 fb0275c320a0
child 48620 7f97d35fac6e
equal deleted inserted replaced
48617:01b07229a6ad 48618:688e5cbd0b91
   617 }
   617 }
   618 
   618 
   619 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
   619 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
   620   assert(java_string->klass() == SystemDictionary::String_klass(),
   620   assert(java_string->klass() == SystemDictionary::String_klass(),
   621          "must be java_string");
   621          "must be java_string");
   622   typeArrayOop value  = java_lang_String::value(java_string);
   622   typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
   623   int          length = java_lang_String::length(java_string);
   623   int length = java_lang_String::length(java_string);
   624   if (length != len) {
   624   if (length != len) {
   625     return false;
   625     return false;
   626   }
   626   }
   627   bool      is_latin1 = java_lang_String::is_latin1(java_string);
   627   bool is_latin1 = java_lang_String::is_latin1(java_string);
   628   if (!is_latin1) {
   628   if (!is_latin1) {
   629     for (int i = 0; i < len; i++) {
   629     for (int i = 0; i < len; i++) {
   630       if (value->char_at(i) != chars[i]) {
   630       if (value->char_at(i) != chars[i]) {
   631         return false;
   631         return false;
   632       }
   632       }
   644 bool java_lang_String::equals(oop str1, oop str2) {
   644 bool java_lang_String::equals(oop str1, oop str2) {
   645   assert(str1->klass() == SystemDictionary::String_klass(),
   645   assert(str1->klass() == SystemDictionary::String_klass(),
   646          "must be java String");
   646          "must be java String");
   647   assert(str2->klass() == SystemDictionary::String_klass(),
   647   assert(str2->klass() == SystemDictionary::String_klass(),
   648          "must be java String");
   648          "must be java String");
   649   typeArrayOop value1  = java_lang_String::value(str1);
   649   typeArrayOop value1    = java_lang_String::value_no_keepalive(str1);
   650   int          length1 = java_lang_String::length(str1);
   650   int          length1   = java_lang_String::length(value1);
   651   bool       is_latin1 = java_lang_String::is_latin1(str1);
   651   bool         is_latin1 = java_lang_String::is_latin1(str1);
   652   typeArrayOop value2  = java_lang_String::value(str2);
   652   typeArrayOop value2    = java_lang_String::value_no_keepalive(str2);
   653   int          length2 = java_lang_String::length(str2);
   653   int          length2   = java_lang_String::length(value2);
   654   bool       is_latin2 = java_lang_String::is_latin1(str2);
   654   bool         is_latin2 = java_lang_String::is_latin1(str2);
   655 
   655 
   656   if ((length1 != length2) || (is_latin1 != is_latin2)) {
   656   if ((length1 != length2) || (is_latin1 != is_latin2)) {
   657     // Strings of different size or with different
   657     // Strings of different size or with different
   658     // coders are never equal.
   658     // coders are never equal.
   659     return false;
   659     return false;
   660   }
   660   }
   661   int blength1 = value1->length();
   661   int blength1 = value1->length();
   662   for (int i = 0; i < value1->length(); i++) {
   662   for (int i = 0; i < blength1; i++) {
   663     if (value1->byte_at(i) != value2->byte_at(i)) {
   663     if (value1->byte_at(i) != value2->byte_at(i)) {
   664       return false;
   664       return false;
   665     }
   665     }
   666   }
   666   }
   667   return true;
   667   return true;
   668 }
   668 }
   669 
   669 
   670 void java_lang_String::print(oop java_string, outputStream* st) {
   670 void java_lang_String::print(oop java_string, outputStream* st) {
   671   assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
   671   assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
   672   typeArrayOop value  = java_lang_String::value(java_string);
   672   typeArrayOop value  = java_lang_String::value_no_keepalive(java_string);
   673 
   673 
   674   if (value == NULL) {
   674   if (value == NULL) {
   675     // This can happen if, e.g., printing a String
   675     // This can happen if, e.g., printing a String
   676     // object before its initializer has been called
   676     // object before its initializer has been called
   677     st->print("NULL");
   677     st->print("NULL");