As JB Nizet suggested, here is the actual code for contains() :
2123 public boolean contains(CharSequence s) { 2124 return indexOf(s.toString()) > -1; 2125 }
And here is the code for indexOf() :
1732 public int indexOf(String str) { 1733 return indexOf(str, 0); 1734 }
That leads to:
1752 public int indexOf(String str, int fromIndex) { 1753 return indexOf(value, offset, count, 1754 str.value, str.offset, str.count, fromIndex); 1755 }
Which ultimately leads to:
1770 static int indexOf(char[] source, int sourceOffset, int sourceCount, 1771 char[] target, int targetOffset, int targetCount, 1772 int fromIndex) { 1773 if (fromIndex >= sourceCount) { 1774 return (targetCount == 0 ? sourceCount : -1); 1775 } 1776 if (fromIndex < 0) { 1777 fromIndex = 0; 1778 } 1779 if (targetCount == 0) { 1780 return fromIndex; 1781 } 1782 1783 char first = target[targetOffset]; 1784 int max = sourceOffset + (sourceCount - targetCount); 1785 1786 for (int i = sourceOffset + fromIndex; i <= max; i++) { 1787 1788 if (source[i] != first) { 1789 while (++i <= max && source[i] != first); 1790 } 1791 1792 1793 if (i <= max) { 1794 int j = i + 1; 1795 int end = j + targetCount - 1; 1796 for (int k = targetOffset + 1; j < end && source[j] == 1797 target[k]; j++, k++); 1798 1799 if (j == end) { 1800 1801 return i - sourceOffset; 1802 } 1803 } 1804 } 1805 return -1; 1806 }
source share