博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String比较
阅读量:5319 次
发布时间:2019-06-14

本文共 1589 字,大约阅读时间需要 5 分钟。

public class Demo {

  
public
static
void
main(String args[])
  
{
    
String str=
new
String(
"hello"
);
    
if
(str==
"hello"
)
    
{
      
System.out.println(
"true"
);
    
}      
    
else    
{
      
System.out.println(
"false"
);
    
}
  
}
}
  • 答案:false

链接:

来源:牛客网

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public
class
Demo {
    
public
static
void
main(String args[]) {
        
String str1 =
new
String(
"hello"
);
        
String str2 =
new
String(
"hello"
);
        
String str3 =
"hello"
;
        
String str4 =
"hello"
;
        
String str5 =
"he"
+
"llo"
;
        
String str6 =
"he"
;
        
String str7 =
"llo"
;
        
System.out.println(str1==str2);
        
System.out.println(str1==str3);
        
System.out.println(str3==str4);
        
System.out.println(str3==
"hello"
);
        
System.out.println(str4==(str6+str7));
    
}
}
上面代码的输出结果是:
false
false
true
true
false
1
String str1 =
new
String(
"hello"
);
这种方式创建的字符串,和正常创建对象一样,保存在堆区。
1
String str3 =
"hello"
;
这种方式创建的字符串,保存在字符串常量区。
 
==用来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不要求数据类型严格相同),则只要两个变量的值相等,就返回true;对于两个引用类型变量,必须指向同一个对象,==才会返回true。
java中使用new String("hello")时,jvm会先使用常量池来管理"hello"常量,再调用String类的构造器创建一个新的String对象,新创建的对象被保存在堆内存中;而直接使用"hello"的字符串直接量,jvm会用常量池来管理这些字符串。故上述程序中str=="hello"返回结果为false

‘==’操作符专门用来比较两个变量的值是否相等,也就是用来比较两个变量对应的内存所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作。

如果一个变量指向的数据是对象类型的,那么这时候涉及了两块内存,对象本身占用一块(堆内存),变量也占用一块。对于指向类型的变量,如果要比较两个变量是否指向同一对象,即要看两个变量所对应的内存的数值是否相等,这时就需要用==操作符进行比较。

equals方法用于比较两个独立对象的内容是否相同。

在实际开发中,我们经常要比较传递过来的字符串是否相等,一般都是使用equals方法。

例如:    

    String a = new String(“foo”);

    String b = new String(“foo”);

两条语句创建了两个对象,他们的首地址是不同的,即a和b中存储的数值是不相同的。所以,表达式a==b将返回false,而这两个对象的内容是相同的,所以表达式a.equals(b)将返回true。

转载于:https://www.cnblogs.com/zhuyeshen/p/11017296.html

你可能感兴趣的文章
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
标识符
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
内存地址对齐
查看>>
创新课程管理系统数据库设计心得
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
把word文档中的所有图片导出
查看>>