java String与数组同为引用类型 但为何有如下区别?(初学者,求大神)
publicclassTestC{/***<String,String[]>*/publicstaticvoidmain(String[]args){String[]c=...
public class TestC {
/**
* <String, String[]>
*/
public static void main(String[] args) {
String[] c = {"1", "2", "3"};
String[] d = c;
if (c == d) {
System.out.println("c,d同");
} else {
System.out.println("c,d不同");
}
c[1] = "3";
System.out.print("c:");
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]);
}
System.out.println();
System.out.print("d:");
for (int i = 0; i < d.length; i++) {
System.out.print(d[i]);
}
System.out.println();
String g = "abc";
String h = g;
if (g == h) {
System.out.println("g,h同");
} else {
System.out.println("g,h不同");
}
g = "cd";
System.out.println("g:" + g);
System.out.println("h:" + h);
String i = "asd";
String k = "asd";
}
}
结果:
c,d同
c:133
d:133
g,h同
g:cd
h:abc 展开
/**
* <String, String[]>
*/
public static void main(String[] args) {
String[] c = {"1", "2", "3"};
String[] d = c;
if (c == d) {
System.out.println("c,d同");
} else {
System.out.println("c,d不同");
}
c[1] = "3";
System.out.print("c:");
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]);
}
System.out.println();
System.out.print("d:");
for (int i = 0; i < d.length; i++) {
System.out.print(d[i]);
}
System.out.println();
String g = "abc";
String h = g;
if (g == h) {
System.out.println("g,h同");
} else {
System.out.println("g,h不同");
}
g = "cd";
System.out.println("g:" + g);
System.out.println("h:" + h);
String i = "asd";
String k = "asd";
}
}
结果:
c,d同
c:133
d:133
g,h同
g:cd
h:abc 展开
5个回答
展开全部
1、数组跟基本类型变量不一样,创建数组的时候必须声明长度大小,或者直接实例化,然后由JVM创建一个对象类来构造数组,所以这里的传递具有联动性,因为是指向同一个内存地址,改变的同一个内存中的值
2、String这个是在内存中创建了两块内存块,值都是一样的,这里是两块内存就是两个不同的对象,修改一个不会影响另一个的(参考:The JavaTM Virtual Machine Specification Second Edition)
2、String这个是在内存中创建了两块内存块,值都是一样的,这里是两块内存就是两个不同的对象,修改一个不会影响另一个的(参考:The JavaTM Virtual Machine Specification Second Edition)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为在java中String是不可变类型,每一次赋值都会产生一个新的字符串(不考虑字符串堆栈),所以,你的g和h一开始都是指向"abc"这个字符串的引用,你重新给g赋值的时候,g指向了"cd"这个字符串,但是h依然是指向“abc”的,所以会出现最后的结果,但是数组是可变对象,而且,你的程序也并没有给数组重新赋值,只是改变了数组内容,所以,指向数组的两个引用内容是一样的,你将程序稍微做个调整,就会的到不一样的结果
public static void main(String[] args) {
String[] c = { "1", "2", "3" };
String[] d = c;
if (c == d) {
System.out.println("c,d同");
} else {
System.out.println("c,d不同");
}
c = new String[] { "4", "5", "6" }; // 在这里给数组C重新赋值,而不是改变内容
System.out.print("c:");
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]);
}
System.out.println();
System.out.print("d:");
for (int i = 0; i < d.length; i++) {
System.out.print(d[i]);
}
System.out.println();
String g = "abc";
String h = g;
if (g == h) {
System.out.println("g,h同");
} else {
System.out.println("g,h不同");
}
g = "cd";
System.out.println("g:" + g);
System.out.println("h:" + h);
}
这和c里面的指针的概念是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不明白你想问什么地方不同
追问
g,h是String类的,但改变g值,h值不变;而c,d为数组,改变c,d也变了。(同为引用类型,照常理前者h也应该随着g变),这是为什么?——大神求解!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询