论坛首页 Java企业应用论坛

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

浏览 61881 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-03-07  
不错,很值得重温一遍。
0 请登录后投票
   发表时间:2011-03-07  
基础的知识还是有些没掌握牢.
0 请登录后投票
   发表时间:2011-03-07  
自己也弄错了几道
0 请登录后投票
   发表时间:2011-03-07  
第六题大意了..然后就是a==(x+y),其他都没问题.
0 请登录后投票
   发表时间:2011-03-07   最后修改:2011-03-07
。。。没事看看scjp认证那本书,绝对受益啊。。。
引用fellatioyzx 的解释:
由于java方法传值是值传递,所以方法里面的ab虽然和方法外的ab指向的对象一样,但是这两个引用在栈中的位置不一样

过程大概是首先在栈中复制引用a为a',b为b',并令a'指向a所指的在堆中的StringBuffer对象,b'指向b所指的在堆中的StringBuffer对象。
因此方法中的b=a只是起到了b'=a'的作用,并没有影响方法外b的指向。
0 请登录后投票
   发表时间:2011-03-07  
fellatioyzx 写道
我都答对了

关于最后一题的话,由于java方法传值是值传递,所以方法里面的ab虽然和方法外的ab指向的对象一样,但是这两个引用在栈中的位置不一样。

过程大概是首先在栈中复制引用a为a',b为b',并令a'指向a所指的在堆中的StringBuffer对象,b'指向b所指的在堆中的StringBuffer对象。
因此方法中的b=a只是起到了b'=a'的作用,并没有影响方法外b的指向。


楼上高手。
事实上,你在eclipse等IDE里,他会提醒你说(the parameter should not be assigned)。也就是说,这么做是没意义的。
0 请登录后投票
   发表时间:2011-03-07  
fastbo 写道
zofuthan 写道
第二道题,我觉得是这样的。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

第2.但前面也是字符串相加呀。我更相信有一个哥们说的:因为x+y不是编译时确定值而是运行时确定值。
第7.基本是这样说的,但期待有进一步深化的分析。



没那么复杂,就是equals 和==的区别。

为什么操作字符串用stringbuffer你肯定经常听说原因:因为z=x+y生成了三个对象。既如此相当于a new 了一个String,x+y new 了一个。当然不等。

a=="hello"+"world"则不然。
因为"hello"+"world" 没有new 一个String
0 请登录后投票
   发表时间:2011-03-07   最后修改:2011-03-07
第一个 switch 问题  属于基本常识, 不应该不会,  否则就不要用switch 语句。
第二个,浪费时间,  我已经 不会去看, 因为即使搞懂了,  也是在浪费时间
3, easy ,我明白,也知道原因, 但写程序, 静态最好不要去 override,  太容易出错。 自己给自己下套。
4, 也应该属于常识了, 不过还是很容易犯错的地方。隐含的类型转换,
    楼主应该再加上 byte类型的增加难度。
byte 运算是自动转换为int 再运算; 
其他同类型运算, 就不转换;
不同类型, 自动转换为高级类型再运算。

5, 几乎无语。。假构造函数 。 虽然可以编译, 不过应该属于程序员的错误,  否则是自己给自己下套
6  无语,。。。。。。。。。。。考试可以,  还是别折腾了。
7,属于基本常识, 不应该不知道。  传值?传址?--------------- 不过对于我的理解是 所有 函数 都是在传值。

估计马上就会有人对我的看法发起进攻。  所以解释一下: 
A。 基本类型, 里面就是一个值, 只能把这个传的形参里。没什么可争执的。
B。 class的,   参数变量就是一个指针, 里面的值是一个地址,传过去的就是就是这个地址的值。 所以实参 原来指到哪里, 就是哪里, 函数里面 不会改变的; 但是它 指向的东西是可以改变的。
C。 String, BigDecimal等特殊类型, 所有上面改变值的操作都会, 产生一个新的实例。  常常看似不同与B,但实际上B 依然有效。
0 请登录后投票
   发表时间:2011-03-07  
确实挺基础的,不过陷阱挺多。。。我就被构造方法那个给坑了- -不过话说在开发中肯定不会出现这个问题。。。。eclipse会有提示
0 请登录后投票
   发表时间:2011-03-07  
挺有意思的!就当复习复习基础知识了
0 请登录后投票
论坛首页 Java企业应用版

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