639 if (value->char_at(i) != chars[i]) { 640 return false; 641 } 642 } 643 } else { 644 for (int i = 0; i < len; i++) { 645 if ((((jchar) value->byte_at(i)) & 0xff) != chars[i]) { 646 return false; 647 } 648 } 649 } 650 return true; 651 } 652 653 bool java_lang_String::equals(oop str1, oop str2) { 654 assert(str1->klass() == SystemDictionary::String_klass(), 655 "must be java String"); 656 assert(str2->klass() == SystemDictionary::String_klass(), 657 "must be java String"); 658 typeArrayOop value1 = java_lang_String::value_no_keepalive(str1); 659 int length1 = java_lang_String::length(value1); 660 bool is_latin1 = java_lang_String::is_latin1(str1); 661 typeArrayOop value2 = java_lang_String::value_no_keepalive(str2); 662 int length2 = java_lang_String::length(value2); 663 bool is_latin2 = java_lang_String::is_latin1(str2); 664 665 if ((length1 != length2) || (is_latin1 != is_latin2)) { 666 // Strings of different size or with different 667 // coders are never equal. 668 return false; 669 } 670 int blength1 = value1->length(); 671 for (int i = 0; i < blength1; i++) { 672 if (value1->byte_at(i) != value2->byte_at(i)) { 673 return false; 674 } 675 } 676 return true; 677 } 678 679 void java_lang_String::print(oop java_string, outputStream* st) { 680 assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string"); 681 typeArrayOop value = java_lang_String::value_no_keepalive(java_string); 682 | 639 if (value->char_at(i) != chars[i]) { 640 return false; 641 } 642 } 643 } else { 644 for (int i = 0; i < len; i++) { 645 if ((((jchar) value->byte_at(i)) & 0xff) != chars[i]) { 646 return false; 647 } 648 } 649 } 650 return true; 651 } 652 653 bool java_lang_String::equals(oop str1, oop str2) { 654 assert(str1->klass() == SystemDictionary::String_klass(), 655 "must be java String"); 656 assert(str2->klass() == SystemDictionary::String_klass(), 657 "must be java String"); 658 typeArrayOop value1 = java_lang_String::value_no_keepalive(str1); 659 int length1 = java_lang_String::length(str1); 660 bool is_latin1 = java_lang_String::is_latin1(str1); 661 typeArrayOop value2 = java_lang_String::value_no_keepalive(str2); 662 int length2 = java_lang_String::length(str2); 663 bool is_latin2 = java_lang_String::is_latin1(str2); 664 665 if ((length1 != length2) || (is_latin1 != is_latin2)) { 666 // Strings of different size or with different 667 // coders are never equal. 668 return false; 669 } 670 int blength1 = value1->length(); 671 for (int i = 0; i < blength1; i++) { 672 if (value1->byte_at(i) != value2->byte_at(i)) { 673 return false; 674 } 675 } 676 return true; 677 } 678 679 void java_lang_String::print(oop java_string, outputStream* st) { 680 assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string"); 681 typeArrayOop value = java_lang_String::value_no_keepalive(java_string); 682 |