1,在JVM中,内存中有一块STRING 常量池,问:(1)如果常量池不断增加,以至于不能创建新的STRING常量时会抛出什么异常?(2)这个STRING常量池是动态的吗?(指常量池大小是否会随STRING常量的创建而增大,是的话当物理内存不够时,是不常量池会转入虚拟内存?)2,STRING类中的toString()方法在工作中应用时有什么实际意义?3,JAVA中保留了goto和const这两个关键字,又不能使用也不可作为标识符,那有什么实际的意义吗?4,这个问题可能与底层硬件有关,因为小弟对底层硬件不是很懂,所以问一下:HT(超线程)CPU能否让JAVA多线程并行处理?OS上的本地线程是否能应用于HT技术?例如WIN XP或是LINUX?或者哪位大哥可以为小弟推荐一下有关于这方面的资料书籍?谢谢~5,System.exit(int value),参数VALUE是否在VM退出时能告诉OS什么状态信息?例如:1,成功,-1,失败。如果不是的话那这个参数不是浪费了吗?6,最后请教一个基础的左减减问题:
package corejava;public class Inc
{
    public static void main(String argv[])
    {
        Inc inc=new Inc();
        int i=0;
        inc.fermin(i);
        System.out.println(i);
        i=i++; //这儿的i++难道根本没执行过????
        System.out.println(i);
    }    void fermin(int i)
    {
        i++;
    }
}
output:为什么???
0
0//同样的C++代码:
#include "iostream"
using namespace std;void f(int);int main()
{
int i=0;
f(i);
cout<<i<<endl;
i=i++; //ok,先把0赋给i,然后i自增一次。分解:i=0;i+=1;
cout<<i<<endl; return 1;
}void f(int i)
{
i++;
}
output:
0
1看这个程序左减减就OK:
package corejava;public class Inc
{
    public static void main(String argv[])
    {
        int x=0;
        int y=10;
        for (int z=0;z<5;z++)
        {
            if ((y-->7)||++x>2) //ok,前两次循环Y事实上每次自减2,后三次循环Y事实每次自减1
            {
                y--;
            }
        }
    }
    System.out.println(y+" "+x);
}
output:
2 3请大哥们指导一下。这些问题都是我在考SCJP时碰到的基础问题,虽然与考试的关系不是很大,却困扰着小弟,请大哥们不吝赐教~小弟万分感谢。答完结分。

解决方案 »

  1.   

    > 1,在JVM中,内存中有一块STRING 常量池,问:(1)如果常量池不断增加,以至于不能创建新的> STRING常量时会抛出什么异常?(2)这个STRING常量池是动态的吗?(指常量池大小是否会随   > STRING常量的创建而增大,是的话当物理内存不够时,是不常量池会转入虚拟内存?)JVM will just use malloc to ask for memory from OS. OS takes care of using physical memory or virtual memory.
    > 2,STRING类中的toString()方法在工作中应用时有什么实际意义?It overrides the toString method in the base Object class. It just returns itself.> 3,JAVA中保留了goto和const这两个关键字,又不能使用也不可作为标识符,
    > 那有什么实际的意义吗?They are reserved but not currently used. Preemptive measures :).
    > 4,这个问题可能与底层硬件有关,因为小弟对底层硬件不是很懂,所以问一下:HT(超线程)CPU能否让JAVA多线程并行处理?OS上的本地线程是否能应用于HT技术?例如WIN XP或是LINUX?或者哪位大哥可以为小弟推荐一下有关于这方面的资料书籍?谢谢~CPU's HyperThreading has nothing to do with the threading in Java. Even if your program is not usng threading at all, at microcode level, CPU can take advantage of HT.
    > 5,System.exit(int value),参数VALUE是否在VM退出时能告诉OS什么状态信息?例如:1,成功,-1,失败。如果不是的话那这个参数不是浪费了吗?Yes. It does pass out to OS. They are useful when you write shell scripts that onvoke your program.
    > 6,最后请教一个基础的左减减问题:I must be out of my mind reading your code and answer this. But you seem like a sincere questioner. It prints out 0 because:  1. The fermin(int i) does not change the value of i. Remember Java uses pass-by-value.
      2. After the statement "i=i++;" i is 0 because i is first asigned to i before it's incremented and the incremented value of 1 is thrown away.
      

  2.   

    非常感谢txranger()兄的详细解答。同时也为小弟不常能上网现在才看到回复而报歉:)有几问题理解的不是很清楚(也请原谅小弟的英文水平~):
    > 1,在JVM中,内存中有一块STRING 常量池,问:(1)如果常量池不断增加,以至于不能创建新的> STRING常量时会抛出什么异常?(2)这个STRING常量池是动态的吗?(指常量池大小是否会随   > STRING常量的创建而增大,是的话当物理内存不够时,是不常量池会转入虚拟内存?)JVM will just use malloc to ask for memory from OS. OS takes care of using physical memory or virtual memory.
    这一段小弟看了好几遍,这儿的malloc是指OS为JVM分配内存的机制?具体如何分配是由JVM的实现而决定?换句话说STRING常量池的大小是由OS为JVM动态分配的?(我希望自己没有理解错:p)2,3,4,5问题解决。谢谢~> 6,最后请教一个基础的左减减问题:I must be out of my mind reading your code and answer this. But you seem like a sincere questioner. It prints out 0 because:  OK,我会记住的:)
      2. After the statement "i=i++;" i is 0 because i is first asigned to i before it's incremented and the incremented value of 1 is thrown away.
    这句话我也看了好多遍,您是指“在i赋值操作之后的i自增运算的结果1是会计算成功的,但之后并不会把1再次赋值给i吧?虽然我有点“茴字为什么有这么多种写法”的感觉,但我想弄明白的这或许是JAVA对处理这种例子的特例吧。因为我不想老是把JAVA与C++常混在一起。呵呵。见谅(同时也再次希望我没理解错您的意思:p)
      

  3.   

    > 这一段小弟看了好几遍,这儿的malloc是指OS为JVM分配内存的机制?具体如何分配是由JVM的实现而决定?换句话说STRING常量池的大小是由OS为JVM动态分配的?(我希望自己没有理解错:p)malloc is a C function that allocates memory from heap. I use it here loosely to refer to dynamic memory allocation mechanism. While most likely a JVM is implemented with C or C++, it certainly doesn't have to be. Your understanding is correct.
    > 您是指“在i赋值操作之后的i自增运算的结果1是会计算成功的,但之后并不会把1再次赋值给i吧?That's right.
      

  4.   

    非常感谢txranger()兄的解答,已结分。请您查收:)