java 字符串给字符串赋值_在Java中使用新关键字和直接赋值的字符串

String s="hi";

String s1=new String("hi");

从内存角度看,s和s1存储在哪里? 无论是在堆内存还是堆栈中。

s指向" hi",而s1指向hi存在的内存位置?

请帮忙?

实际上,它是Java,堆或堆栈放置中的内存分配的重复,只能标记为字符串对象和字符串文字之间的差异的重复

考虑以下

String s ="hi";

String s1 = new String("hi");

变量s将引用从字符串常量池引用的字符串文字hi,如果还有更多变量,例如s2 ="hi",则s和s2将引用同一对象。

String s1 = new String("hi");

这将在运行时创建一个新的String。

在第一种情况下,所有的strnig文字都是在JVM中加载类时创建的

在几秒钟的情况下,执行new String()时将创建字符串对象。

您可以在以下链接中找到有关字符串常量池的很好的教程

String s="hi";

该语句在字符串池上创建包含" hi"的字符串对象。

String s1=new String("hi");

该语句在堆内存中创建一个包含" hi"的String对象,并在StringPool上创建一个副本(如果stringPool中不包含" Hi")。但是,这里,s将指向堆上的对象。

在类加载时,所有String文字都将放入池中。使用new String("hi")时,将在堆上创建一个对象。 s和s1是参考变量,它应该驻留在方法调用堆栈中!字符串文字" hi"将由JVM处理,方法是在堆上创建String对象,并从String池中对其进行引用。 new运算符仅采用在构造函数中传递其引用的字符串对象,并创建一个新对象。碰巧,传递给构造函数的字符串是文字。

据我说,当我们使用String s =" hello"这样的文字创建String时,

的对象将引用存储在字符串常量池中的字符串" hello"。

如果我们将使用诸如String s = new String(" hello")之类的New关键字创建新的String,则在这种情况下将创建两个对象。 object s引用了存储在普通堆区域中的另一个对象,该对象将引用存储在String常量池中的String Hello。

有关更多详细信息,请访问以下链接:-http://www.javatpoint.com/java-string

以上答案是正确的,但您不应使用String *s1 = new String("hi")代替String s1 = new String("hi"),因为对new的调用将返回指向字符串对象的指针。

我对C ++相当陌生。对不起,如果我错了。

PS:我使用的是gcc版本4.4.7 20120313(Red Hat 4.4.7-4)(GCC)。

s和s1只是对字符串的引用,因此与s和s1引用的字符串实例不同,它们将存储在堆栈中。在这种情况下,s所引用的值将被放入字符串池,而s1所引用的值则不会。为什么?因为使用了字符串的构造函数来制作该字符串。仅合并文字,并且即使您选择这些文字作为其他文字的串联(例如,如果已将String s2 ="h" +"i"设置为String,则s和s2将指向与存储的字符串相同的实例在字符串池中)。

但是,这会导致一些陷阱:因为池中的字符串指向同一对象,所以很容易使用==运算符而不是equals方法来比较字符串,这很危险,因为在某些情况下,==是与equals()相同,但是==的结果与equals()方法不同的地方很多。

" hi"是字符串文字。这将在字符串常量池中创建一次。在Java 7中,它与其他对象一起位于Heap中,但在此之前它是在Perm-Gen中创建的

String s ="hi";

String s1 = new String("hi");

new String("hi")在堆上创建一个新的String对象,与现有对象分开。

s和s1是对两个单独对象的引用。引用本身实际上位于堆栈上,即使它们指向堆中的对象也是如此。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值