Java 避免循环内的字符串charAt()方法

Java 避免循环内的字符串charAt()方法,java,string,for-loop,Java,String,For Loop,如果我更换,对代码优化(速度等)有影响吗 //以前 public void test(String str) { for(int i=0; i<str.length(); i++) { System.out.println(str.charAt(i)); // VIOLATION } } 公共无效测试(字符串str) { 对于(inti=0;i是的,仍然可以优化 public void test(String str)

如果我更换,对代码优化(速度等)有影响吗

//以前

public void test(String str)  
{
     for(int i=0; i<str.length(); i++)
     {      
          System.out.println(str.charAt(i)); // VIOLATION 
     }
}
公共无效测试(字符串str)
{

对于(inti=0;i是的,仍然可以优化

public void test(String str)
{      
     char[] ch = str.toCharArray(); // CORRECTION
     int n = ch.length;
     for(int i=0; i < n; i++) 
     {             
           System.out.println(ch[i]); // CORRECTION    
     }
}
公共无效测试(字符串str)
{      
char[]ch=str.toCharArray();//更正
int n=通道长度;
对于(int i=0;i
我认为您不会看到任何明显的差异。即使您看到了,我相信平台之间的差异也不尽相同

 for(int i=0; i<str.length(); i++) 

for(int i=0;i实际上是回答“X比Y快吗?”就是尝试一下。当您遇到瓶颈并将其精确定位到特定的代码位时,最好进行优化。您是否发现这段代码是导致应用程序运行缓慢的原因?
toCharArray
必须迭代整个字符串并创建数组,该数组将首先是所有字符的副本。然后您必须再次删除该副本。
charAt
没有这个问题。@Pshemo:-)另一方面,
System.out.println(ch[i]);
在某些机器上可能运行得更快,因为它可以直接访问数组索引(JIT可能会很好地优化它)
每次调用它时都会有附加的条件检查,这可能会导致优化代码的JIT事件。:@TheLostMind True,这就是为什么我们通常不进行优化,直到看到某些功能非常慢:)正如前面所说的“”不是向下投票者..但数组的长度在编译时是已知的..编译器将执行比您已经执行的更精确(甚至更好)的更正..这不会影响运行时性能我不同意,如果str作为参数传递,在编译时如何确切地知道它?
 for(int i=0; i<str.length(); i++) 
int strLength = str.length();
 for(int i=0; i<strLength ; i++)