Java 字符串s1=";之间的区别是什么;“你好”;字符串s1=新字符串(“Hello”)?
Java中的Java 字符串s1=";之间的区别是什么;“你好”;字符串s1=新字符串(“Hello”)?,java,Java,Java中的strings1=“Hello”和strings1=新字符串(“Hello”)之间有什么区别 如果String s1=“Hello”和String s2=新字符串(“Hello”),则s1==s2 如果字符串s1=“Hello”和字符串s2=新字符串(“Hello”),s1==s2吗 答案是:不 因为s1和s2是不同的对象,string是不可变的。因此,s1==s2将是false和s1。equals(s2)将是true这里引用了Joshua Bloch的有效Java中关于“new S
strings1=“Hello”
和strings1=新字符串(“Hello”)
之间有什么区别
如果String s1=“Hello”
和String s2=新字符串(“Hello”)
,则s1==s2
如果字符串s1=“Hello”和字符串s2=新字符串(“Hello”),s1==s2吗
答案是:不
因为s1和s2是不同的对象,
string
是不可变的。因此,s1==s2
将是false
和s1。equals(s2)
将是true
这里引用了Joshua Bloch的有效Java中关于“new String()”的用法:
作为不该做的极端例子,请考虑以下陈述:
字符串s=新字符串(“stringette”);//不要这样做强> 该语句在每次执行时都会创建一个新的字符串实例,并且 这些物体的创造是必要的。字符串的参数 构造函数(“stringette”)本身在功能上是一个字符串实例 与构造函数创建的所有对象相同。如果这 使用发生在循环或频繁调用的方法中,数以百万计 可以不必要地创建字符串实例。改进的版本是 简单地说: String s=“stringette” 当通过双相等进行比较时,这两个值都将计算为真。但是,它们并不相等,而是都指向内存中相同的“文字字符串”。这永远不是比较字符串内容的方式,所以不要让它愚弄你String myStr = new String("hello");
String myStr1 = new String("hello");
将计算为false,因为它们都引用具有不同内存地址的不同对象
在比较字符串内容是否相等时,始终使用myStr.equals(myStr1)
。
请记住,=
仅比较它们是否引用内存中的同一对象。编码:
String s1 = "Hello";
String s2 = new String("Hello")
使JVM使用字符串文字:相同字符串文字的每次使用都是对相同对象的引用
对此进行编码:
String s1 = "Hello";
String s2 = new String("Hello")
将始终创建新的字符串对象
那么,将s1==s2
不,永远不会。您的问题的答案是“不”,请找出以下原因:-
条件s1==s2将比较内存中现在是两个不同位置的内存位置。因此,它将是错误的。+1相关示例..如果字符串s3=“Hello”,s3==s1吗?在该场景中,它将看起来好像是这样的,但它并没有以我们想要的方式比较它们,即按内容进行比较。我们想看看s1和s3中的每个字符是否相同,而不是两个引用变量是否指向内存中的相同位置。不要养成这样比较对象的习惯(字符串就是对象),因为你会得到错误的结果,以后会把你弄糊涂。对象是不透明的(封装和数据隐藏),因此对象内容的定义各不相同。现在仍然使用.equals()谢谢,它非常有用。如果字符串s3=“Hello”,s3==s1吗?@CMQ_14是的。没错,“==”运算符与引用匹配。因为在本例中有两个元素s1和s2,并且它们具有不同的引用/地址,所以is s1==s2的输出将为false。但如果使用“equals()”,则输出将为真,因为将比较值,并且根据问题,值是相同的;String s2=“你好”;这里s1==s2给出了一个真实的输出。