第一个:求执行结果public class MyClass{
static void aMethod(StringBuffer sf1,StringBuffer sf2{
sf1.append(sf2);
sf2 = sf1;
}
public static void main(String[] args){
StringBuffer sf1 = new StringBuffer("A");
StringBuffer sf2 = new StringBuffer("B");
aMethod(sf1,sf2);
System.out.println(sf1+":"+sf2);
}
}
这个结果为啥是AB:B啊?第二个:求执行结果
class MySuper{
int i = 10;
MySuper(){
print();
i = 20;
}
void print(){
System.out.println(i);
}}class MySub extends MySuper{
int j = 30;
MySub(){
print();
j = 40; }
void print(){
System.out.println(j);
}
public static void main(String[] args){
System.out.print(new MySub().j);
}
}
这个结果为啥是03040啊?
第三个:第三行生成的object在第几行执行后成为GC的对象?
public class MyClass{
public StringBuffer aMethod(){
StringBuffer sf = new StringBuffer("Hello");
StringBuffer[] sf_arr = new StringBuffer[1];
sf_arr[0] = sf;
sf = null;
sf_arr[0] = null;
return sf;
}
}答案为啥是第七行啊?
static void aMethod(StringBuffer sf1,StringBuffer sf2{
sf1.append(sf2);
sf2 = sf1;
}
public static void main(String[] args){
StringBuffer sf1 = new StringBuffer("A");
StringBuffer sf2 = new StringBuffer("B");
aMethod(sf1,sf2);
System.out.println(sf1+":"+sf2);
}
}
这个结果为啥是AB:B啊?第二个:求执行结果
class MySuper{
int i = 10;
MySuper(){
print();
i = 20;
}
void print(){
System.out.println(i);
}}class MySub extends MySuper{
int j = 30;
MySub(){
print();
j = 40; }
void print(){
System.out.println(j);
}
public static void main(String[] args){
System.out.print(new MySub().j);
}
}
这个结果为啥是03040啊?
第三个:第三行生成的object在第几行执行后成为GC的对象?
public class MyClass{
public StringBuffer aMethod(){
StringBuffer sf = new StringBuffer("Hello");
StringBuffer[] sf_arr = new StringBuffer[1];
sf_arr[0] = sf;
sf = null;
sf_arr[0] = null;
return sf;
}
}答案为啥是第七行啊?
解决方案 »
- 关于解析http响应中Content-Disposition的问题
- 请教一个判断时间格式的正则表达式
- 实现 clone 方法时,为什么不能用 Object.clone() 而用 super.clone() ,super 不就是 Object 吗?
- 如何实现网页模拟操作??
- 不知道这个问题发在那里,就发在这里吧,怎样对界面中的一些控件进行国际化?
- 简单且根基的问题:JSP、ASP 都不是语言,而是一种技术,是这样吗?谢谢大家!
- 高手请指教!
- 一个未入门的人,求助安装方法(JBuilder)!?
- 哪里有j2sdk的zip包的下载,不是那个安装版的
- 高手赐教:关于java编译环境的问题
- hibernate lazy 加载问题
- 求一个UTC转换当地时间 程序
2 问题太多
3 我比你还吝啬第一题:对象和引用的区别
第二题:自己Debug看看执行顺序吧
第三题:sf_arr[0] = sf; 所以必须所有指向对象的引用全部释放才能被GC
sf1.append(sf2);
sf2 = sf1; //不要被这句迷惑,这句屁用没有。
}第二题:这个有点麻烦了。涉及到初始化顺序的问题。
结果分为三部分,0 30 40 ,第一个0是MySuper.print()产生的,那时i还没有赋值,第二个30是MySub.print()产生的,那时j的值是30,最后的40是main中的printf打出来的。第三题:
看一楼老大的回复。
{
StringBuffer sf1 = new StringBuffer("");
StringBuffer sf2 = new StringBuffer("");
private void MyClass(String str1,String str2)
{
this.sf1 = new StringBuffer(str1);
this.sf2 = new StringBuffer(str2);
}
private void aMethod(StringBuffer sf1,StringBuffer sf2)
{
sf1.append(sf2);
sf2 = sf1;
this.sf1=sf1;
this.sf2=sf2;
}
public static void main(String[] args)
{
MyClass m=new MyClass();
m.MyClass("A","B");
m.aMethod(m.sf1,m.sf2);
System.out.println(m.sf1+":"+m.sf2);
}
}
把第一个程序改了一下,不知道是不是你想要的那个效果.运行结果:AB:AB
sf1.append(sf2);
sf2 = sf1;
}
用debug可以看到当没有跳转到aMethod时,sf1的ID时19,sf2的ID时25,跳转到aMethod时,sf1的ID时19,sf2的ID时29,也就是说并没有对main函数中的sf2进行处理。
但他的赋值必须是通过new的方式,而不能像String那样因为他是基本的数据类型
这句sf2 = sf1是无效的 因为main()函数中的两个对象传过去的是引用所以sf2没有改变也就是说在 aMethod(StringBuffer sf1,StringBuffer sf2)中的这两个变量获得是main函数传过来的引用
第二个是,MySub 继承了MySuper,所以第一次输出时j 没有初始化,默认为0;
最好用Debug看看执行顺序;
第三个:看一楼的老大