一个非常简单的关于JAVA基础知识的问题(int vs String)

ttt 2002-01-22 11:54:04
int x = 7;
int y = x;
String s = “Hello”;
String t = s;

书上说对像上面这样的赋值,由于x,y是原始类型,所以 x 的值被复制到y,他们是两个独立的变量且其中任何一个的进一步的变化都不对另外一个构成影响;但 String 是非原始类型,这时s 和 t均引用单一的对象。
但我做了个实验:
public class testString
{
public static void main(String[] args)
{
String x1 = "Hello";
String x2 = x1;
System.out.println(x1 + x2);
x2 = "world";
System.out.println(x1 + x2);
}
}
输出结果为:
HelloHello
Helloworld
既然做为非原始类型的 x1 和 x2 ,他们引用同一对象,那为什么 x2 的值改变了,但 x1 没有跟着一起变?
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinajava 2002-01-22
  • 打赏
  • 举报
回复
x1="Hello" x1引用"Hello" 对象
x2=x1 x2引用"Hello"对象 所以x1+x2="HelloHello"
x2="world" x2引用"world"对象 而x1还是引用"Hello"对象 并没有变
所以x1+x2="Helloworld"
mickeypeng 2002-01-22
  • 打赏
  • 举报
回复
建议去参加scjp考试,这些问题都将不是问题
xiaoyixiao 2002-01-22
  • 打赏
  • 举报
回复
x2 = "world";//此时x2的指向“world”的地址,而不是“Hello”的地址。
//x1的地址仍保持指向“Hello”的地址。
//变的只是x1,x2所指向的地址
alula 2002-01-22
  • 打赏
  • 举报
回复
不断给x1,x2 引用新的对象,内存不是浪费很大吗?

编译器会安排 常量字串 共享的,所以并不会产生内存浪费的问题。
况且,没有被引用的 字串,在合适的时候,会被 垃圾回收器GC 清除的。所以不用担心,
java为你想的很周到。
wangtaoyy 2002-01-22
  • 打赏
  • 举报
回复
你的问题时改变了变量而没有改变对象
ttt 2002-01-22
  • 打赏
  • 举报
回复
to skyyoung(路人甲):
那这样下去我不断给x1,x2 引用新的对象,内存不是浪费很大吗?
wangtaoyy 2002-01-22
  • 打赏
  • 举报
回复
1。String对象是不可改变的
2。引用赋值不改变原来的对象,只是变量将引用新的对象

skyyoung 2002-01-22
  • 打赏
  • 举报
回复
开头x1,x2都引用了"Hello"对象。但当x2 = "world"时,x2就引用了"world"对象。内存里就有两个对象,即使你再x1="123",内存里就有三个对象,并不会覆盖!
jupiter_lwm 2002-01-22
  • 打赏
  • 举报
回复
下面有一个例子,你比较一下,就应该明白了
class Number {
int i;
}

public class Assignment {
public static void main(String[] args) {
Number n1 = new Number();
Number n2 = new Number();
n1.i = 9;
n2.i = 47;
System.out.println("1: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1 = n2;
System.out.println("2: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1.i = 27;
System.out.println("3: n1.i: " + n1.i +
", n2.i: " + n2.i);
}
} ///:~
ttt 2002-01-22
  • 打赏
  • 举报
回复
String x1 = "hello";

String x1 = new String("Hello");

这两句不管从哪方面来讲应该都是一样的吧。
rhj_2001 2002-01-22
  • 打赏
  • 举报
回复

String x1 = new String("Hello");
String x2 = x1;
System.out.println(x1 + x2);
x2 = new String("world");
System.out.println(x1 + x2);
}
去试试!

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧