书上说String类对象是常量,不可改变,因此要改变字符串中
某个字符的内容(不改变长度)需要重新开辟一段空间并把该段空
间的引用赋给String引用变量。我想请问大家的是:
对于Double、Integer这样的类型也是一样的吗?
Double和double到底是什么关系呢?
如:Double a; double b; a=b;
是这句话隐含了什么信息,是将b的引用赋给a吗(但是double应该没引用值呀)?
而且对于Double a=new Double(3.0); a=4.3;
用分步调试发现 a 原先引用的Double对象不见了,
而是a的引用id改变了,也就是说a指向了另一块内存?
按理来说要指向另一段内存应该是Double a=new Double(3.0);
Double b=new Double(4.0); a=b;这中形式的啊?
如果Double类对象不是常量,
那怎么改变对象的值,而不是引用的值呢?
本人新手,请各位赐教啊。public Object{
private int a = 0;
public Object(int a)
{
this.a = a;
}
}
public static void main(String[] avg)
{
Object obj = new Object(10);
}
这样就是改变对象成员变量a的值。
java中存在基础数据类型如:int、long 、float、double等。这些基础类型占用空间少。
其对应封装类型为:Integer、Long、Float、Double。只有对象才能引用传递。
String类型本身就是一个对象因为其对象被加了final关键字所以对象不可改变。 java中一切都是对象,但是int,double等几种数据类型又不是对象,所以有了Integer,Double等对象
至于Double a; double b; a=b;这个用到了java自动装箱机制
估计就是a=new Double(b)了,个人猜测,所以a的引用变了
至于改变对象的值而不是引用,根据上面的猜测,或许还真是不能改变值,只能改变引用呢。。
仅仅是猜测,求大神科普如果使用jdk1.4编译,就不会有这么多疑问了
如果使用的是比1.4高的jdk,使用如下方式编译,也不会出现这么多疑问:
javac -source 1.4 Test.java
或许楼主想要看这篇文章:http://www.ticmy.com/?p=110