http://bonnie0203.i170.com/user/yqj2065/Article_113018
11、为什么main方法必须用static修饰?
A:public static void main(String[] s)是Java程序的起点。
用static修饰的原因:无中生有。
10、Q:传说"abcd"是String的引用,对吗?
A:严格地说,字符串常量是String的引用。
由于术语混用的原因,我们常常说"abc"是字符串对象。
如果你认为这是一个传说,不是你的错,是你的老师差劲。
9、Q:操作符& 和 && 的区别是什么?
A:如果你不知道& 也是逻辑运算符,你可以上网获得很多(错误的)答案。
作为逻辑运算符,&& 是短路的,而&不是。
8、Q:引用变量、引用和对象三个术语,有必要严格区别吗?
A:学习Java的前一年,你要严格区别。
以后可以顺便混用,你看一本书的时候,首先要明白作者是怎样混用的;
objVar、ref、obj有几种混用方式:
ref与obj混用比较常见,负面效果比较小。
三者全部混用的书,你别看。(基本上没有)
7、Q:关于内存分配,基本变量在栈中分配、对象在堆中分配,对吧?
A:对象在堆中分配/总在Java heap中分配,这是对的。
基本变量也好、引用变量也好,一般是:作为局部变量在Java栈中分配;作为实例变量在堆中分配。
final变量(包括final局部变量)、static变量静态分配。
6、Q:一个引用变量占据多大空间?
A:对于“Object objVar;”的objVar ,据说被分配了一个字(32位)。
5、Q:一个Object对象有多大?为什么没有sizeof?
A:为什么你想知道它有多大?一般来说,Java不需要sizeof。
C有这个sizeof操作符,因为用户要(不得不)管理malloc调用、因为C语言的primitive types的长度是不固定的。
有人用Runtime.getRuntime().freememory()计算创建一个对象的前后内存余量,如:
static Runtime runtime = Runtime.getRuntime();...
long start, end;
Object obj;
runtime.gc();
start = runtime.freememory();
obj = new Object(); // 你希望看的东西
end = runtime.freememory();
System.out.println("它占据了" + (start-end) + " bytes.");
这个方式不保证准确。
一般而言,一个Object占据了16 bytes(4个字)。
4、Q: new String("aaa")创建几个String对象?
A:没有上下文,答案不定。1 或者2个。
问题中创建对象是什么意思呢?编译时、运行时?
总之知道“常量池”就行了。
3、Q:Java中只有引用没有指针,对吗?
A:reference不过是Java中用的一个术语,不考虑实际的实现方式,它就是一个指针。
Java语言中没有了指针运算(pointer arithmetic),所以ref是安全的指针。事实上,every reference to an object is a pointer.
所以你会遇到NullPointerException。总之,每一个Java程序员都会知道:
int[] a = {0, 1, 2, 3};
int[] b = a ;
b[0] = 88 ;
于是 a[0] 为88 。a and b are pointers (or references) to the same object.
中文中,引用的翻译毫无方向感,注意这一点。
2、Q:构造器和方法的不同有哪些?
A:除了overload机制和长得有点像,其他的都是不同的。
1、Q:Java中对象按引用传递?
A:烦人的问题。
再说Java中有按引用传递,别说我瞧不起你。
榆木脑袋。