Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串变量的内存分配_Java - Fatal编程技术网

Java 字符串变量的内存分配

Java 字符串变量的内存分配,java,Java,请确认两个代码中哪一个是有效的a或b。其中字符串定义内部循环或外部循环。 好心的建议 (a) for(int i=0;i这两种情况之间没有区别。在这两种情况下,您都为字符串变量赋值 我知道你在想什么样的优化。这种优化现在通常由编译器来完成。但同样,它也不适用于你的情况。内存方面会有一点不同。JVM足够智能,可以管理 但是你应该在要求的最小范围内声明一个变量,也就是说,我觉得第一种情况很好 我不记得Effective java的确切引用,它是这样的 当我们使用尽可能小的作用域时,垃圾收集器会做得最

请确认两个代码中哪一个是有效的a或b。其中字符串定义内部循环或外部循环。 好心的建议

(a)


for(int i=0;i这两种情况之间没有区别。在这两种情况下,您都为字符串变量赋值


我知道你在想什么样的优化。这种优化现在通常由编译器来完成。但同样,它也不适用于你的情况。

内存方面会有一点不同。JVM足够智能,可以管理

但是你应该在要求的最小范围内声明一个变量,也就是说,我觉得第一种情况很好

我不记得Effective java的确切引用,它是这样的

当我们使用尽可能小的作用域时,垃圾收集器会做得最好


但如果您想在循环外访问该变量,第二个选项是.< /p>

,不像C++,在java中,在使用它之前,不需要在Java中单独地初始化局部变量。因此不需要初始化

String Key = null 
在使用之前。只有在使用局部变量时才初始化它是一种更好的编程实践。从某种意义上说,只有在for循环中使用该变量时才在堆中为该变量分配内存也是有效的

有关变量初始化的更多了解,请参阅oracle文档

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

就效率而言,这并不重要,但是(a)是两者中最好的一个——在尽可能小的范围内定义变量对于代码可读性来说更好

与执行时间相比,差异非常小/可以忽略不计 在2…编译器优化您的代码

公共类测试
{
公共静态void main(字符串[]args){
long l=System.nanoTime();
功能1(“hi”);
System.out.println(System.nanoTime()-l);
long l1=System.nanoTime();
功能2(“hi”);
System.out.println(System.nanoTime()-l1);
}
公共静态void func1(字符串str)
{

对于(inti=0;iI)来说,在担心性能之前,我会关注如何使代码更具可读性(并遵循Java命名约定),请在以后的格式化问题上投入更多精力。(我还将使用单独的类作为键,而不仅仅是使用字符串连接。)
String Key = null 
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
public class Test
{
    public static void main(String[] args) {

        long l = System.nanoTime();
        func1("hi");
        System.out.println(System.nanoTime()-l);
        long l1 = System.nanoTime();
        func2("hi");
        System.out.println(System.nanoTime()-l1);
    }

    public static void func1(String str)
    {
        for(int i=0;i<10000;i++)
        {
            String s= str ;
        //  System.out.println(s);
        }
    }

    public static void func2(String str)
    {String s= null;
        for(int i=0;i<10000;i++)
        {
             s= str ;
        //  System.out.println(s);
        }
    }
}

O/p : 
1. 277530
   265557

2. 267694
  243747