当前位置:  技术问答>java相关

关于引用类类型的赋值问题

    来源: 互联网  发布时间:2015-10-29

    本文导语:  public class StringTest { public static void main(String args[]) { String s="Hello"; String t=s; System.out.println("s:" + s + ";t:" + t); s="Hello World!"; System.out.println("s:" + s + ";t:" + t); } } --------------- ...

public class StringTest
{
public static void main(String args[])
{
String s="Hello";
String t=s;
System.out.println("s:" + s + ";t:" + t);

s="Hello World!";
System.out.println("s:" + s + ";t:" + t);
}
}
---------------
编译运行后,输出显示如下:
s:Hello;t:Hello
s:Hello World!;t:Hello

可“s”和“t”为引用String的类类型,为什么在值改变后,它们的值没有同时改变呢?
我感觉好象是系统为它们各自分配了一块内存,就象原始类型一样;这是怎么回事?

而下面这个就是真正的引用类型,难道是“String”这个类特殊吗?

class TestClass
{
int x=1;
}

public class ClassTest
{
public static void main(String args[])
{
TestClass tc1=new TestClass();
TestClass tc2;
tc2=tc1;

System.out.println("tc1.x:" + tc1.x);
System.out.println("tc2.x:" + tc2.x);

tc1.x=10;

System.out.println("tc1.x:" + tc1.x);
System.out.println("tc2.x:" + tc2.x);
}
}
-------------
编译运行显示:
tc1.x:1
tc2.x:1
tc1.x:10
tc2.x:10

|
String 本来就是特殊。
但是你的第一个例子一点都不“特殊”。
在java中,字符串(String)是不能改变的,所以当你 s="Hello World!"的
时候,java并不是把原来在“hello”那个地址的内容改为“Hello 
World!”,而是新开辟一块内存存放 “hello world!”字符串,然后把 s 
指向它。而 t 很显然还是指向“hello”,得到的答案也就很合理了。

|
同意一楼的!!!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • HTML5 <blockquote> 标签(定义引用)详细介绍及举例说明
  • Java中弱引用和软引用的区别以及虚引用和强引用介绍
  • JQuery 在线引用及测试引用是否成功
  • c++ const引用与非const引用介绍
  • “当某个实例不再被任何对象引用时就会被垃圾回收机制回收”,那么怎样才算是不被任何对象引用呢?
  • python共享引用(多个变量引用)示例代码
  • 解析Android开发优化之:软引用与弱引用的应用
  • 如何在一个package中引用另一个package中的类?
  • JSP引用JAVABEAN的问题
  • 关于在内核空间和用户空间引用一个空指针的后果很原因
  • 关于环境变量的设置和引用
  • grep 后向引用问题
  • 我的Jbuilder怎么引用我自己编写的Class文件?
  • 在aspx页面引用html页的写法
  • 操作系统 iis7站长之家
  • 用户定义类引用??
  • 一个简单的引用的问题
  • EJB间如何引用?
  • iso的头文件怎么在linux下引用啊
  • 请问在C文件中如何引用 C++ 生成库?
  • 引用的奇怪问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3