Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建了多少个对象,包括字符串对象_Java - Fatal编程技术网

Java 创建了多少个对象,包括字符串对象

Java 创建了多少个对象,包括字符串对象,java,Java,谁能告诉我创建了多少个对象。s3没有从字符串池引用相同的hello吗?有多少个字符串对象 /** * */ package agnitio; /** * @author admin * */ public class TestString { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String s1="h

谁能告诉我创建了多少个对象。s3没有从字符串池引用相同的hello吗?有多少个字符串对象

/**
 * 
 */
 package agnitio;

/**
 * @author admin
 *
 */
public class TestString {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String s1="hello";
    String s2="hello";
    String s3 = new String("hello");
    System.out.println(s1==s2); // true
    System.out.println(s1==s3); // false
    System.out.println(s2==s3); // false

}

}

仅创建两个对象第一个对象执行以下操作时:

String s1="hello";
String s2="hello";
执行以下操作时,不会在内存中创建对象:

String s1="hello";
String s2="hello";
这是因为JVM字符串类基于flyweight模式,所以如果内存中已经存在一个字符串,比如“hello”,那么创建一个新引用将不会创建一个新对象。s1和s2都将指向相同的内存位置

执行以下操作时,将创建第二个对象

String s3 = new String("hello");
“新建”操作符将始终创建一个新对象


==比较两个引用是否指向同一内存位置。而equals比较字符串的内容。话虽如此,正如我所提到的,s1和s2都指向相同的内存位置,因此==和equals都将返回TRUE进行比较。但s3是一个不同的对象,因此与s1和s2进行==运算的比较将返回false。但是,如果对s1、s2和s3进行相等比较,则会得到真值。

只创建了两个对象第一个对象执行以下操作时:

String s1="hello";
String s2="hello";
执行以下操作时,不会在内存中创建对象:

String s1="hello";
String s2="hello";
这是因为JVM字符串类基于flyweight模式,所以如果内存中已经存在一个字符串,比如“hello”,那么创建一个新引用将不会创建一个新对象。s1和s2都将指向相同的内存位置

执行以下操作时,将创建第二个对象

String s3 = new String("hello");
“新建”操作符将始终创建一个新对象

==比较两个引用是否指向同一内存位置。而equals比较字符串的内容。话虽如此,正如我所提到的,s1和s2都指向相同的内存位置,因此==和equals都将返回TRUE进行比较。但s3是一个不同的对象,因此与s1和s2进行==运算的比较将返回false。但如果对s1、s2和s3进行equals比较,则会得到TRUE。

.equals()方法根据该字符串中的值(存在的内容)匹配两个字符串,并检查两个对象是否指向同一引用

检查下面的链接,您将得到您的答案

.equals()方法根据字符串中的值(存在的内容)匹配两个字符串,并==检查两个对象是否指向同一引用

检查下面的链接,您将得到您的答案


不,想象一下StringPool设施没有使字符串不可变,这根本不可能,因为在字符串池的情况下,一个字符串对象/文本(例如“hello”)被许多引用变量引用,因此如果其中任何一个变量更改了值,其他变量将自动受到影响,例如

String A = "hello"
String B = "hello" 
现在字符串B称为“hello”.toUpperCase(),它将同一个对象更改为“TEST”,因此A也将是“TEST”,这是不可取的

====编辑======

如果我们讨论的是有多少个字符串对象:

String s = "hello";    // one string object in the string pool "hello"
String s2 = "hello";   // two object variables (s, s2)
在这个简单的例子中,“abc”将进入池中,s和s2将引用它

String s3 = new String("hello"); // creates two objects, and one reference variable.
在本例中,由于我们使用了new关键字,Java将创建一个新的String对象 在正常(非池)内存中,s将引用它。除了字面上的“你好”
也将被放置在池中(如果它不存在)。

不,想象一下StringPool设施没有使字符串不可变,这是根本不可能的,因为在字符串池中,一个字符串对象/文本(例如,“hello”)被许多引用变量引用,因此,如果其中任何一个值发生变化,其他值将自动受到影响,例如

String A = "hello"
String B = "hello" 
现在字符串B称为“hello”.toUpperCase(),它将同一个对象更改为“TEST”,因此A也将是“TEST”,这是不可取的

====编辑======

如果我们讨论的是有多少个字符串对象:

String s = "hello";    // one string object in the string pool "hello"
String s2 = "hello";   // two object variables (s, s2)
在这个简单的例子中,“abc”将进入池中,s和s2将引用它

String s3 = new String("hello"); // creates two objects, and one reference variable.
在本例中,由于我们使用了new关键字,Java将创建一个新的String对象 在正常(非池)内存中,s将引用它。除了字面上的“你好”
也将放置在池中(如果不存在)。

使用String.contentEquals:

"stringA".contentEquals("StringB");

字符串是对象,每当您创建“新字符串”时,它实际上会创建一个指向内存中某个位置的“新字符串(值)”,例如,“float”是基元/值,而float是带有指向内存中某个位置的指针的对象。当您使用“==”时,它只是检查指针是否相同。“String.contentEquals”检查两个对象的内容是否相同。

使用String.contentEquals:

"stringA".contentEquals("StringB");

字符串是对象,每当您创建“新字符串”时,它实际上会创建一个指向内存中某个位置的“新字符串(值)”,例如,“float”是基元/值,而float是带有指向内存中某个位置的指针的对象。当您使用“==”时,它只是检查指针是否相同。“String.contentEquals”检查两个对象的内容是否相同。

我知道dude请大家注意question@Monis希望你们现在明白了你们想要的:-)如果这三个都指向同一个对象,为什么只有一个是真的而不是真的all@Monis我相信你把对象和参照物搞混了。s1、s2、s3是对一些内存对象的引用。这意味着它们指向存储某些内容的某个内存位置。s1和s2是指向一个内存位置的两个引用。但是s3是指向另一个内存位置的引用。两个内存位置的内容相同。希望它能消除一些混乱now@Monis当前位置我和JunedAhsan仍然相信是你。我知道,伙计,请大家都来question@Monis希望你现在明白你的意思