dcxdata 是什么类,你的src是不是贴错了~~
以下是一段论述:
传值与传引
严格来说,Java中所有方法参数都是传值。因为即使是传递的参数是对象的引数时,引数本身也是传值的。所有基本类型都是传值的。
传值:被传入的参数被视为内部的局域变量,其变化不影响外部变量的原始值。
传引:对于引数本身来讲也是传值的,但是在方法内部若对引数所指向的对象属性有改变,则会直接实时地影响所指向的对象属性。
理解传引这一概念的最佳方式就是画出指向图。eg. Aà(Object)O 对于A本身而言它是传值的,也就是说当A作为参数传递的时候,假若在方法内部把其它的引数赋给了A,但是当方法返回时,A仍旧是指向原来的对象,而不会改变。其次,对于传引来说,假若在方法内部对A所指向的对象属性有改变,那么对象属性的改变会是直接实时的。
再次强调,Java中所有的参数传递都是传值的。
传值这种题型的考试很多,基本类型传值问题考的较多的是对某一变量,故意用某一方法试图改变它,然后方法返回时再打印它。按传值的说法,实际上该变量并没有改变。
所以jj只是引用了g的值,它无论如何修改,实际上指向该变量的对象不变34.
1)public class X{
2) public static void main(String[] args){
3) String foo="ABCDE";
4) foo.substring(3);
5) foo.concat("XYZ");
6) }
7) }
what is the value of foo at line 6? Answer: ABCDE
问题的关键在于String的不变性,虽然又是substring又是concat的,但都只是创建了一个新的字符串,原本的foo一直都没有被改变,也不可能被改变。
49.
public class Test{
static void leftshift(int i, int j){
i<<=j;
}
public static void main(String args[]){
int i=4, j=2;
leftshift(i,j);
System.out.println(i);
}
}
what is the result?
A.2
B.4
C.8
D.16
E.The code will not compileAnswer: B
传递的是简单类型呀!!也就是说传递的是值的拷贝,所以原本的值是不变的!
兄弟,体会体会。
以下是一段论述:
传值与传引
严格来说,Java中所有方法参数都是传值。因为即使是传递的参数是对象的引数时,引数本身也是传值的。所有基本类型都是传值的。
传值:被传入的参数被视为内部的局域变量,其变化不影响外部变量的原始值。
传引:对于引数本身来讲也是传值的,但是在方法内部若对引数所指向的对象属性有改变,则会直接实时地影响所指向的对象属性。
理解传引这一概念的最佳方式就是画出指向图。eg. Aà(Object)O 对于A本身而言它是传值的,也就是说当A作为参数传递的时候,假若在方法内部把其它的引数赋给了A,但是当方法返回时,A仍旧是指向原来的对象,而不会改变。其次,对于传引来说,假若在方法内部对A所指向的对象属性有改变,那么对象属性的改变会是直接实时的。
再次强调,Java中所有的参数传递都是传值的。
传值这种题型的考试很多,基本类型传值问题考的较多的是对某一变量,故意用某一方法试图改变它,然后方法返回时再打印它。按传值的说法,实际上该变量并没有改变。
所以jj只是引用了g的值,它无论如何修改,实际上指向该变量的对象不变34.
1)public class X{
2) public static void main(String[] args){
3) String foo="ABCDE";
4) foo.substring(3);
5) foo.concat("XYZ");
6) }
7) }
what is the value of foo at line 6? Answer: ABCDE
问题的关键在于String的不变性,虽然又是substring又是concat的,但都只是创建了一个新的字符串,原本的foo一直都没有被改变,也不可能被改变。
49.
public class Test{
static void leftshift(int i, int j){
i<<=j;
}
public static void main(String args[]){
int i=4, j=2;
leftshift(i,j);
System.out.println(i);
}
}
what is the result?
A.2
B.4
C.8
D.16
E.The code will not compileAnswer: B
传递的是简单类型呀!!也就是说传递的是值的拷贝,所以原本的值是不变的!
兄弟,体会体会。
◆String
String类最重要的一点在于“不变性(immutable)”。它的意思是一旦String类产生了就不会再改变了,若试图改变它都会产生新的对象。
String对象有字面量和构造函数之分。字面量对象是放在缓冲池中的,这意味着,如果两个字面量值相同,则第二个对象会指向第一个已经存在的对象,而不会新产生,所以==返回的是true。用构造器产生的对象同一般对象。对于字面量来说,多个类共享的是同一个缓冲池。这意味着即使在另外一个类中创建一个先前类中已有的字面量字符串,则仍旧是同一对象。
考试中需要注意的是:s=new String(“abc”);s+=”def”;System.out.println(s);
s=new String(“abc”);s.concat(“def”);System.out.prinln(s);
前一程序打印为“abcdef”,后一程序打印为“abc”。区别是第一个程序又重新赋值给了s。而第二个程序中s.concat(“def”)只是产生了一个新的对象但没有赋给谁,但原来的s不变。
另外,对于StringBuffer而言是可变的,对它的任何改变都是实时的。你可以把jj的String g修改为StringBuffer g,看看效果是什么。