如题,为什么?
解决方案 »
- 添加了一个JPanel面板,但是却不能立刻显示出来
- 在线求java项目结构组织图!!!急!!!
- Thread类中能运行线程体的方法是
- Java 数据转换基础
- 定义类的问题,望DX解答
- java.lang.ArrayIndexOutOfBoundsException:搞不定啊(先进先得)数组越界?
- 有一个关于gui的问题
- 各位采用mvc模式都吸取哪些地方的例子??是自己设计的么?(B/S)
- JCreator的JDK profiles如何设置?
- 如何在java.text.包中用NumberFormat格式化如double,float等数据的输出呢?
- 散分问helloworld的问题,100分哦
- 今天有评论了下java,弄java的,不弄java的,都来看看
yuejing贴
String x = new String("abc");
String y = new String("abc");
那么x和y指向不同的对象。你用x==y判断为不等。
如果如下代码:
String x = "abc";
String y = "abc";
那么只创建一个对象。你用x==y判断为相等。
因为用等号的时候,String类型的应用首先会在字符串池中找又没有相同的字符串存在,如果有的话就不会在创建新的对象了,但是用new关键字的话就是显示说在创建一个对象,java中的所谓应用很类似于C++中的指针的,就是引用存放的是一个对象的hashcode,而指针动态分配则存放一个对象的地址。你也可以通过打印对象的hashcode()方法的返回之验证我的说法。
public String(String value) {
count = value.length();
this.value = new char[count];
value.getChars(0, count, this.value, 0);
}
这是java.lang.String的源代码,你们看看就知道是不是一个对象了。虽然String对象本身并没有修改自身数据的地方,但是java的对象都可以修改自身数据,对于String也没有任何限制。许多人认为String是个很特殊的对象。java是对String的相关操作有一些特殊处理,但String也是Object,它必需满足一个Object所有特征。
所以String s = new String("xyz");
是调用了String类的拷贝构造函数effective java 里面详细的说明了这个问题
String abc = new String("abc");
String bcd = new String("abc");
如果是这样就是创建三个并不是四个!因为第一个创建了两个对象,在第二个对象创建的时候
先回去静态区找,找到了需要的就在堆里创建一个对象,然后把引用指导静态区!
用String str = "abc"
就是在栈中的