该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-07
keke8614 写道 楼主学习JAVA多长时间了?
我搞java有好些年头了,基础的东西以前确实常握得不太扎实。你想说我太菜了,还是太烂了?如果不是最好。如果是的话,别太张狂,先看看自已有没有料,别人不一定比你差。 |
|
返回顶楼 | |
发表时间:2011-03-07
neverforget 写道 System.out.println("a == x+y:" + (a == (x + y)));
是true 如果你猜是true,那你是错的。如果你运行了代码,那只能说能你的编译器是自已开发的。 |
|
返回顶楼 | |
发表时间:2011-03-07
liwenjie 写道 那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
因为x+y不是编译是确定值而是运行时确定值 七:对象引用 java是按值传递,对象类型的话,分为栈上的引用和堆上的对象,栈上的引用被复制一份,如果操作堆上的对象则对象改变,但是如果操作引用则不改变 第七题你说得还是不够详细,愿听进一步分解。 |
|
返回顶楼 | |
发表时间:2011-03-07
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.基本是这样说的,但期待有进一步深化的分析。 |
|
返回顶楼 | |
发表时间:2011-03-07
本来以为基础还行的,汗啊
|
|
返回顶楼 | |
发表时间:2011-03-07
System.out.println("a == x+y:" + (a == (x + y)));
这个整错了 String x = "hello"; String y = "world"; String a = "helloworld"; 13行String b = "hello" + "world"; 14行String c = x + y; 生成的字节码不一样: L3 LINENUMBER 13 L3 LDC "helloworld" ASTORE 4 L4 LINENUMBER 14 L4 NEW java/lang/StringBuilder DUP ALOAD 1 INVOKESTATIC java/lang/String.valueOf(Ljava/lang/Object;)Ljava/lang/String; INVOKESPECIAL java/lang/StringBuilder.<init>(Ljava/lang/String;)V ALOAD 2 INVOKEVIRTUAL java/lang/StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder; INVOKEVIRTUAL java/lang/StringBuilder.toString()Ljava/lang/String; ASTORE 5 13行 "hello" + "world";2个都是常量,编译器在编译器应该是可以确定的,直接 LDC "helloworld" 14行就是先new StringBuilder了 |
|
返回顶楼 | |
发表时间:2011-03-07
还好 还好,最后一题需要琢磨一下
|
|
返回顶楼 | |
发表时间:2011-03-07
做错了一题,最后一题......继续加强
|
|
返回顶楼 | |
发表时间:2011-03-07
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
之前看过这个String的操作方式,如果不是两个String直接操作,而是通过X,Y这样的变量操作的话,那么会通过StringBuilder来进行String的操作。 最后一个的话,我觉得楼主回答的对的。我的理解方式是,java是值传递,且不可改变的。 |
|
返回顶楼 | |
发表时间:2011-03-07
七、对象引用
方法参数的使用情况: 1.一个方法不能修改一个基本数据类型的参数(数值型和布尔型) 2.一个方法可以改变一个对象参数的状态 3.一个方法不能实现让对象参数引用一个新的对象 |
|
返回顶楼 | |