该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-07
的确值得重视
很多大问题就是由一堆小问题堆起来的 |
|
返回顶楼 | |
发表时间:2011-03-07
其实最后一题从两方面考虑:
1.参数传递:此处是传引用; 2.变量作用域,特别是同名变量的作用域: 如果在类中定义的成员变量与局部变量同名,那么在局部变量定义的作用范围之内,显示的同名变量的值都是局部变量的值。出这这个范围,同名变量的值就是成员变量的值。 此处虽然不是局部变量和成员变量,而是main方法中的变量和静态方法中的变量,但规则相同,所以append方法中的b = a;其实是修改了局部变量b指向的位置,出了append方法,这个修改是透明的。 以上,不知说清没…… |
|
返回顶楼 | |
发表时间:2011-03-07
test it ok
|
|
返回顶楼 | |
发表时间:2011-03-07
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
对于"hello+world"(字符串常量进行相加时)JVM在编译期会自动对其进行优化,直接将结果"helloworld"放入常量池,而对于“x+y”由于是变量相加,JVM在编译期间无法得知其结果,会生成新的字符串对象来保留其结果,即在常量池中开辟新的内存来保留其结果(称其为k),此时a和k进行比较时,结果自然是false。 |
|
返回顶楼 | |
发表时间:2011-03-07
检查一下薄弱环节~~~
|
|
返回顶楼 | |
发表时间: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的值时不变的。 |
|
返回顶楼 | |
发表时间:2011-03-07
测完、哥哭了
|
|
返回顶楼 | |
发表时间:2011-03-07
最后修改:2011-03-07
![]() ![]() |
|
返回顶楼 | |
发表时间:2011-03-07
palmer 写道 第一个 switch 问题 属于基本常识, 不应该不会, 否则就不要用switch 语句。
第二个,浪费时间, 我已经 不会去看, 因为即使搞懂了, 也是在浪费时间 3, easy ,我明白,也知道原因, 但写程序, 静态最好不要去 override, 太容易出错。 自己给自己下套。 4, 也应该属于常识了, 不过还是很容易犯错的地方。隐含的类型转换, 楼主应该再加上 byte类型的增加难度。 byte 运算是自动转换为int 再运算; 其他同类型运算, 就不转换; 不同类型, 自动转换为高级类型再运算。 5, 几乎无语。。假构造函数 。 虽然可以编译, 不过应该属于程序员的错误, 否则是自己给自己下套 6 无语,。。。。。。。。。。。考试可以, 还是别折腾了。 7,属于基本常识, 不应该不知道。 传值?传址?--------------- 不过对于我的理解是 所有 函数 都是在传值。 估计马上就会有人对我的看法发起进攻。 所以解释一下: A。 基本类型, 里面就是一个值, 只能把这个传的形参里。没什么可争执的。 B。 class的, 参数变量就是一个指针, 里面的值是一个地址,传过去的就是就是这个地址的值。 所以实参 原来指到哪里, 就是哪里, 函数里面 不会改变的; 但是它 指向的东西是可以改变的。 C。 String, BigDecimal等特殊类型, 所有上面改变值的操作都会, 产生一个新的实例。 常常看似不同与B,但实际上B 依然有效。 说的有理,很多题目实际意义不大。 |
|
返回顶楼 | |
发表时间:2011-03-07
抛出异常的爱 写道 ![]() ![]() got it. |
|
返回顶楼 | |