我在理解如何执行以下代码时遇到问题。您能帮我举一个1/2个例子吗?
代码是:
public class StringArray { public static String getFirstString(String[] values) { if (values.length == 0) { return ""; }
String result = values[0];
for (int i=1; i<values.length; i++) {
if (result.compareTo(values[i]) > 0) {// i.e. result > values[i]
result = values[i];
}
}
return result;
}
public static void main(String[] args) { String[] nume= {"Andrei", "Andreea", "Andrea", "Marius", "Marcus", "Marcel", "Florin"}; System.out.println(getFirstString(nume)); } } 基本上,第一个项目是经过处理的吗?
首先是Andrei. Andrei 会进入第一个if?values.长度不应为7? 1.1“value”是参数的引用,应该指向main方法中给出的数组[]名称,对吧? 因此, Andrei 将被比作Andreea,但从这里,为什么Andrei 比Andreea大?我很难理解if(result.compareto(values[i])>0)。
这里的关键要素是:理解compareTo()方法的“contract” 首先查看javadoc:
按字典顺序比较两个字符串。比较是基于字符串中每个字符的Unicode值。在字典上比较此String对象表示的字符序列与自变量字符串表示的字符序列。如果此String对象在字典上在参数字符串之前,则结果为负整数。如果此String对象在字典上跟随自变量字符串,则结果为正整数。如果字符串相等,则结果为零;否则,结果为零。当equals(Object)方法返回true时,compareTo确切返回0。
这是字典顺序的定义。如果两个字符串不同,则它们要么在某个索引处具有不同的字符(这是两个字符串的有效索引),要么它们的长度不同,或者两者都存在。如果它们在一个或多个索引位置具有不同的字符,则令k为最小索引;那么,在字符串位置k处的字符具有较小值(通过使用<运算符确定)的字符串,按字典顺序在另一个字符串之前。在这种情况下,compareTo返回两个字符串中位置k处两个字符值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果在它们之间没有索引位置不同,则较短的字符串在字典上在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差-即值:
this.length()-anotherString.length()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。