Java 重复函数调用与将结果存储在临时变量中

Java 重复函数调用与将结果存储在临时变量中,java,performance,Java,Performance,我的代码看起来像: class Main { public static void main(String args[]){ String[] s1 = {"This ", "is ", "a ","sentence ", "."}; String sentence = Arrays.toString(s1); System.out.println(sentence.substring(4, sentence.length()-1)

我的代码看起来像:

class Main {
    public static void main(String args[]){
         String[] s1 = {"This ", "is ", "a ","sentence ", "."}; 
         String sentence = Arrays.toString(s1);
         System.out.println(sentence.substring(4, sentence.length()-1));
    }

    private static <T> String arrayToString(T[] t){
         StringBuilder sb = new StringBuilder();
         for(T val: t){
            sb.append(val.toString());
         }
    }
}
我的问题是,为了避免存储对计算值的引用,我多次调用了arrayToString()方法

  • arrayToString计算是否会执行多次
  • Java中是否有某种机制可以减少对这些多次调用的惩罚
  • 使用以前版本的代码是否更好
  • 变量是最直接的方法。您还可以实现某种形式的缓存/记忆,这样当您调用函数时,它将检查是否已经计算了过去的结果,并直接返回该结果
  • 是的,在几个方面都比较好。一方面,您不会调用两次
    arrayToString
    ,另一方面,它更具可读性,因为我们现在知道
    arrayToString
    返回某种“类似句子”的对象。使用变量可以添加更有用的上下文,并使代码更具可读性
  • 变量是最直接的方法。您还可以实现某种形式的缓存/记忆,这样当您调用函数时,它将检查是否已经计算了过去的结果,并直接返回该结果
  • 是的,在几个方面都比较好。一方面,您不会调用两次
    arrayToString
    ,另一方面,它更具可读性,因为我们现在知道
    arrayToString
    返回某种“类似句子”的对象。使用变量可以添加更有用的上下文,并使代码更具可读性
  • 变量是最直接的方法。您还可以实现某种形式的缓存/记忆,这样当您调用函数时,它将检查是否已经计算了过去的结果,并直接返回该结果
  • 是的,在几个方面都比较好。一方面,您不会调用两次
    arrayToString
    ,另一方面,它更具可读性,因为我们现在知道
    arrayToString
    返回某种“类似句子”的对象。使用变量可以添加更有用的上下文,并使代码更具可读性
  • 变量是最直接的方法。您还可以实现某种形式的缓存/记忆,这样当您调用函数时,它将检查是否已经计算了过去的结果,并直接返回该结果
  • 是的,在几个方面都比较好。一方面,您不会调用两次
    arrayToString
    ,另一方面,它更具可读性,因为我们现在知道
    arrayToString
    返回某种“类似句子”的对象。使用变量可以添加更有用的上下文,并使代码更具可读性

  • 一般来说,在用Java编写代码时,您应该认识到,当代码执行得更频繁时,它是及时编译的。自从

    arrayToString(s1).substring(4, arrayToString(s1).length())
    
    是相当可预测的,您可以预期,一旦实时编译器启动,性能损失应该得到解决,因为它将自己为您的计算创建缓存。对于任何需要优化的代码来说,这当然是一个过于乐观的假设,但对于Java来说,通常最好坚持编写可读代码,而不要太担心性能,Java虚拟机在一定程度上弥补了代码抽象和性能之间的差距

    通常,您可以使用一个工具(例如,我只能推荐的工具)来监视编译代码的性能。有时很难找出性能瓶颈,但根据我的经验,像您这样的代码永远不会导致糟糕的用户体验,因为它仅仅是处理一个简单字符串,需要几个时钟周期,这甚至不足以ping数据库。就在你阅读这篇文章的时候,我的手机可能已经计算了数十亿次了


    总而言之,人们过于担心性能。编写可维护和可读的代码应该始终是您的主要目标。

    一般来说,在用Java编写代码时,您应该认识到,在更频繁地执行代码时,您的代码是及时编译的。自从

    arrayToString(s1).substring(4, arrayToString(s1).length())
    
    是相当可预测的,您可以预期,一旦实时编译器启动,性能损失应该得到解决,因为它将自己为您的计算创建缓存。对于任何需要优化的代码来说,这当然是一个过于乐观的假设,但对于Java来说,通常最好坚持编写可读代码,而不要太担心性能,Java虚拟机在一定程度上弥补了代码抽象和性能之间的差距

    通常,您可以使用一个工具(例如,我只能推荐的工具)来监视编译代码的性能。有时很难找出性能瓶颈,但根据我的经验,像您这样的代码永远不会导致糟糕的用户体验,因为它仅仅是处理一个简单字符串,需要几个时钟周期,这甚至不足以ping数据库。就在你阅读这篇文章的时候,我的手机可能已经计算了数十亿次了


    总而言之,人们过于担心性能。编写可维护和可读的代码应该始终是您的主要目标。

    一般来说,在用Java编写代码时,您应该认识到,在更频繁地执行代码时,您的代码是及时编译的。自从

    arrayToString(s1).substring(4, arrayToString(s1).length())
    
    是相当可预测的,您可以预期,一旦实时编译器启动,性能损失应该得到解决,因为它将自己为您的计算创建缓存。对于任何需要优化的代码来说,这当然是一个过于乐观的假设,但是对于Java来说,通常最好坚持编写可读代码,而不要太担心性能,代码抽象和