关于Java中的关键字“new”

时间:2012-03-30 16:03:25

标签: java

  

可能重复:
  Questions about Java's String pool

伙计们这两者有什么区别。

(1)

String s = new String("hello"); // creating an object on heap then assign that object to the reference s.

(2)

String s = "hello" // did I make an object here?? Im not using the word new.

也是数组示例

int x[] = {1, 2, 3, 4, 5}; // did I make object here? 

3 个答案:

答案 0 :(得分:4)

String s = "hello"正在将string literal“你好”分配给s

使用new关键字,除了字符串文字外,还可以创建一个新对象。

请注意:

String s = "hello";
System.out.println(s == "hello");
s = new String("hello");
System.out.println(s == "hello");

最有可能产生

true
false

由于s引用了字符串文字“hello” - 你在第一种情况下得到了一个身份,而在第二种情况下它是一个新对象,并且没有身份 - 这是两个不同的对象,这是发生的包含相同的值。

关于你的数组问题:是的,创建了一个int[]对象。

答案 1 :(得分:0)

  1. 是的,您已经创建了一个新字符串obj
  2. “hello”可能在堆中,但它不在堆中。并且它不是在运行时创建/分配的。相反,它是在程序开始之前实现的。
  3. 是的,你在堆中创建了一个int []

答案 2 :(得分:0)

关于字符串构造函数,你总是有对象。

当你说

String test = "test";

你创建一个内容为“test”的字符串对象,但是当你说

String test= new String("test");

您创建一个内容为“test”的字符串对象,并将其作为参数传递给字符串 构造函数来创建一个新的String对象。所以最后你有 创建了2个字符串对象。

构造函数的代码是:

public String(String original){.....}

在大多数情况下,字符串构造函数被认为是无用的。

在这个帖子中,他们描述了什么时候可以使用

Use of the String(String) constructor in Java