关于声明的问题!!大家一定要帮我!帮我的给5QB,我QQ87
在看我的问题之前先看看实例 实例: class A
{
private String i;
public void setI(String x)
{
i=x;
}
public String getI(){
return i;
}
} public class java {
public static void main(String[] args) {
A s1=new A();
A s2=new A();
s1.setI("a");
s2.setI("b");
System.out.println("a的i="+s1.getI());
System.out.println("b的i="+s2.getI());
s1=s2; //s1指向s2的地址
s1.setI("c"); //s1的值改为c,即s1指向的s2的值变为c
System.out.println("a的i="+s1.getI());
System.out.println("b的i="+s2.getI()); } } 即输出的是 abcc 大家在看看下面这个问题:
问题: public class java
{
public static void main(String args[])
{ String s1=new String("a");//创建指向a的引用s1
String s2=new String("b");//创建指向b的引用s2 System.out.println("s1="+s1);
System.out.println("s2="+s2);
s1=s2;//s1指向s2的地址
s1="c";//s1的值改为c,即s1指向的s2值变为c
System.out.println("s1="+s1);
System.out.println("s2="+s2);//为什么s2还是b,而不是c? } } 大家看看这个题,我注释的部分哪里不对?? 我认为输出的是 abcc啊
可是 输出的是 abcb 谁能解释一下
在看我的问题之前先看看实例 实例: class A
{
private String i;
public void setI(String x)
{
i=x;
}
public String getI(){
return i;
}
} public class java {
public static void main(String[] args) {
A s1=new A();
A s2=new A();
s1.setI("a");
s2.setI("b");
System.out.println("a的i="+s1.getI());
System.out.println("b的i="+s2.getI());
s1=s2; //s1指向s2的地址
s1.setI("c"); //s1的值改为c,即s1指向的s2的值变为c
System.out.println("a的i="+s1.getI());
System.out.println("b的i="+s2.getI()); } } 即输出的是 abcc 大家在看看下面这个问题:
问题: public class java
{
public static void main(String args[])
{ String s1=new String("a");//创建指向a的引用s1
String s2=new String("b");//创建指向b的引用s2 System.out.println("s1="+s1);
System.out.println("s2="+s2);
s1=s2;//s1指向s2的地址
s1="c";//s1的值改为c,即s1指向的s2值变为c
System.out.println("s1="+s1);
System.out.println("s2="+s2);//为什么s2还是b,而不是c? } } 大家看看这个题,我注释的部分哪里不对?? 我认为输出的是 abcc啊
可是 输出的是 abcb 谁能解释一下
解决方案 »
- 有问题请教大家,类似红警或者星际游戏那种的。
- Java编译器的问题
- 对java中static 与 abstract 关系的一点思考, 为什么不能在方法中同时存在??
- 请大家点评一下我对堆栈的了解 谢谢
- 如何获得机器的硬件信息
- 初学JAVA遇到的一个小困惑,大家帮忙解决
- [b]如何在组合框选择相应的驱动器 然后列表框里出现相应的文件 就象vb中的驱动器列表框 实现关联[/b]
- 聊天应用程序中的用户登录问题
- ■■投诉Java版主,您是MS的枪手,删除Java贴子,想要我们学.net吗?大家同意的,每人发贴子,一起UP,一起投诉!!!
- 请问motoA6288+的汉字编码 100分马上给
- 去掉一个字符串中的某一特定字符的操作,在线等!
- java 皮肤类skinlf怎么使用呀?有没有会用?
此时s1指向的是一个新创建的对像,s2指向的仍然是"b"
String a="xxx";//声明了引用a,指向一个字符串对象,其内容为xxx;等同于String a=new String("xxx");
a="yyy";//引用a重新指向了一个字符串对象yyy,等同于a=new String("yyy");而不是将对象xxx的内容修改为yyy,原来的xxx不可以被修改
所以推荐用bufferstring
s1="c";//s1的值改为c,即s1指向的s2值变为c ————————————————————————
s1=s2;//s1指向s2的地址
s1="c";//建立新对象"c",并把句柄赋给s1。 s1不指向s2了
ps:String会不停的创建对象,不停的改变句柄^^
* Strings are constant; their values cannot be changed after they
* are created. String buffers support mutable strings.
* Because String objects are immutable they can be shared. For example:
//请看jdk的源码String.java中的注释:String是常量,所以String被创建之后它的值不能被修
//改,StringBuffer支持动态修改.String不可变,所以如下所示:
* String str = "abc";
* is equivalent to:
* char data[] = {'a', 'b', 'c'};
* String str = new String(data);
所以:
s1="c";//等价于char data[]={'c'} ;String s1 = new String(data);