该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-07
哎 我的基础知识啊
|
|
返回顶楼 | |
发表时间:2011-03-07
二、Equals和==运算符
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。 ==是比较地址。 七、对象引用 参数传递时传值call by value |
|
返回顶楼 | |
发表时间:2011-03-07
第二道题,我觉得是这样的。a+b是字符串相加,我记得字符串相加是重新构建了个new StringBulider类的,所以是false
第七道题,你解释的不够清楚,我补充下。首先,Java的方法传递其实是值传递!基础数据大家都明白;主要是对象,对象它其实传递的是地址数值。所以,形参a,b是局部变量,在调用时,他们都指向main方法中的a,b局部变量,因为a.append(b)是对main方法中a变量地址的操纵,所以append方法调用后,a的值变化了,但是append方法中局部变量b它最后指向了main方法中a的地址,可是这个b和main中的b却不是一样的,main中的b所指向的地址中,值并未发生改变。所以syso的结果就是ab,b |
|
返回顶楼 | |
发表时间:2011-03-07
确实做错了一些题目,看来基础有待加强啊!
|
|
返回顶楼 | |
发表时间:2011-03-07
System.out.println("a == x+y:" + (a == (x + y)));
是true |
|
返回顶楼 | |
发表时间:2011-03-07
第二题:
a == "hello" + "world" java编译器会直接将"hello"+"world"优化成"helloworld",与a都是指向常量池中的"helloworld",所以相等,返回true a == (x + y) 这里的x+y是引用相加操作,可以用正常的字符相加解释,是生成了新的StringBuilder对象,所以两个指向的不是一个地方,返回false 第四题: 上面已经有人回答的差不多了,其实public static void append(StringBuffer a, StringBuffer b)中的变量a,b只是main方法中的变量a,b的引用地址副本,也就是说相当于append中的a与main中的a是指向同一个地址,append中的b与main中的b是指向同一个地址,所以a.append(b)操作影响到了main方法中的a,但是append方法中的b=a;操作只是改变了append方法的中b的指向,并没有改变main方法中b的指向 |
|
返回顶楼 | |
发表时间:2011-03-07
基本学习了,第7题大家都说了,第2题是面试经常出现的题,这主要是关于静态常量的知识点。之前看过资料,String赋值的话,如果有变量相加的,JVM由于不确定变量的值,所以会new一个新的String出来。还有另外一种情况也会新new一个String出来,具体忘记了,呵呵
|
|
返回顶楼 | |
发表时间:2011-03-07
由于1/4和3/4发生隐性类型转换,精度损失,不会生成0.25和0.75,所以有分号的数都为0。
个人认为java对于除数和被除数同时为int时其运算法则和C语言相同,并非是精度损失,而是相当于运算符重载。 |
|
返回顶楼 | |
发表时间:2011-03-07
最后一题,java都是值传递
|
|
返回顶楼 | |
发表时间:2011-03-07
那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
因为x+y不是编译是确定值而是运行时确定值 七:对象引用 java是按值传递,对象类型的话,分为栈上的引用和堆上的对象,栈上的引用被复制一份,如果操作堆上的对象则对象改变,但是如果操作引用则不改变 |
|
返回顶楼 | |