论坛首页 Java企业应用论坛

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

浏览 63408 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-03-07  
的确值得重视
很多大问题就是由一堆小问题堆起来的
0 请登录后投票
   发表时间:2011-03-07  
其实最后一题从两方面考虑:
1.参数传递:此处是传引用;
2.变量作用域,特别是同名变量的作用域:
   如果在类中定义的成员变量与局部变量同名,那么在局部变量定义的作用范围之内,显示的同名变量的值都是局部变量的值。出这这个范围,同名变量的值就是成员变量的值。 
  此处虽然不是局部变量和成员变量,而是main方法中的变量和静态方法中的变量,但规则相同,所以append方法中的b = a;其实是修改了局部变量b指向的位置,出了append方法,这个修改是透明的。
  以上,不知说清没……
0 请登录后投票
   发表时间:2011-03-07  
test it      ok
0 请登录后投票
   发表时间:2011-03-07  
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。

对于"hello+world"(字符串常量进行相加时)JVM在编译期会自动对其进行优化,直接将结果"helloworld"放入常量池,而对于“x+y”由于是变量相加,JVM在编译期间无法得知其结果,会生成新的字符串对象来保留其结果,即在常量池中开辟新的内存来保留其结果(称其为k),此时a和k进行比较时,结果自然是false。

0 请登录后投票
   发表时间:2011-03-07  
检查一下薄弱环节~~~
0 请登录后投票
   发表时间:2011-03-07  
分析:
大家来分析一下这题,我还没有完全理解。
我的分析,可能是错的,哈哈,算是抛砖引玉。
1.a.append(b);-->ab 。因为a是引用,所以调用a的方法,相当于直接调用jvm中的a,所做的append也相当于直接在对象上操作,生效。
2.append方法中第一次b=a,-->b。因为a,b都为main方法内局部变量,跨append方法作用域b对a的引用不生效。
3.main方法中第二次b=a,-->ab。因为在同一作用域方法中,b对a的引用生效,。

a,b在作为参数传递时,其实是等于生成了新的变量指向与a,b的内存地址(称其为a1,b1)。即2个引用指向同一个内存地址。此时,所以此时通过调用a1的append方法时,a1所指向的内存地址的值发生了改变。而b=a实际上是将a1的引用赋给b1,那方法中的b1就指向的a1的引用,但对于b却没有任何影响。所以结果b的值时不变的。
0 请登录后投票
   发表时间:2011-03-07  
测完、哥哭了
0 请登录后投票
   发表时间:2011-03-07   最后修改:2011-03-07

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

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

估计马上就会有人对我的看法发起进攻。  所以解释一下: 
A。 基本类型, 里面就是一个值, 只能把这个传的形参里。没什么可争执的。
B。 class的,   参数变量就是一个指针, 里面的值是一个地址,传过去的就是就是这个地址的值。 所以实参 原来指到哪里, 就是哪里, 函数里面 不会改变的; 但是它 指向的东西是可以改变的。
C。 String, BigDecimal等特殊类型, 所有上面改变值的操作都会, 产生一个新的实例。  常常看似不同与B,但实际上B 依然有效。

说的有理,很多题目实际意义不大。
0 请登录后投票
   发表时间:2011-03-07  
抛出异常的爱 写道


got it.
0 请登录后投票
论坛首页 Java企业应用版

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