论坛首页 Java企业应用论坛

Java容易搞错的知识点-觉得基础扎实的来看

浏览 61942 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-03-07  
哎 我的基础知识啊
0 请登录后投票
   发表时间:2011-03-07  
二、Equals和==运算符
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。

==是比较地址。


七、对象引用

参数传递时传值call by value
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2011-03-07  
确实做错了一些题目,看来基础有待加强啊!
0 请登录后投票
   发表时间:2011-03-07  
System.out.println("a == x+y:" + (a == (x + y)));  

是true
0 请登录后投票
   发表时间: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的指向
0 请登录后投票
   发表时间:2011-03-07  
基本学习了,第7题大家都说了,第2题是面试经常出现的题,这主要是关于静态常量的知识点。之前看过资料,String赋值的话,如果有变量相加的,JVM由于不确定变量的值,所以会new一个新的String出来。还有另外一种情况也会新new一个String出来,具体忘记了,呵呵
0 请登录后投票
   发表时间:2011-03-07  
由于1/4和3/4发生隐性类型转换,精度损失,不会生成0.25和0.75,所以有分号的数都为0。

个人认为java对于除数和被除数同时为int时其运算法则和C语言相同,并非是精度损失,而是相当于运算符重载。
0 请登录后投票
   发表时间:2011-03-07  
最后一题,java都是值传递
0 请登录后投票
   发表时间:2011-03-07  
那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。

因为x+y不是编译是确定值而是运行时确定值

七:对象引用
java是按值传递,对象类型的话,分为栈上的引用和堆上的对象,栈上的引用被复制一份,如果操作堆上的对象则对象改变,但是如果操作引用则不改变
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics