java 字符串String比较 equals ==

一、==和equals区别

==:
在比较对象时比较的是引用地址是否相同;
在比较基本类型时比较的是其内容。
equals:
比较的是内容,而不比较其引用。

如果对象不同,而内容相同,”==”返回false,equals返回true

String s1 = new String("aaa");
String s2 = new String("aaa");
// s1与s2不是同一个对象
System.out.println(s1==s2);            //false
System.out.println(s1.equals(s2));    //true

如果是同一引用,”==”返回true,equals返回true

String s1 = new String("aaa");
String s2 = s1;
//s1和s2是同一个地址的引用
System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

String类似基本类型使用
Java中有8种基本数据类型(字母开头小写),即boolean、byte、short、char、int、float、long、double,基本数据类型不是对象,放在堆栈中,用完就销毁,访问速度快。而对象放在堆中。如果必须用到对象Java针对每种基本数据类型提供了包装类,即Boolean、Byte、Short、Character、Integer、Float、Long、Double(开头大写)等。

String s1 = "aaa";
String s2 = "aaa";
// s1与s2是类似类型
System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

为啥产生如上结果?
 直接等号赋值是放入内存池的,其它变量也可以引用;new初始化分配内存空间,不可引用。
 String s=”a”和String s=new String(“a”)是有本质上的区别的。前者是在字符串池里写入一个字符’a’,然后用s指向它;后者是在堆上创建一个内容为”a”的字符串对象。
 如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

二、其他

String s;是没有初始化的引用,只是给s分配一个内存空间;
String s=null;为空引用,是分配的空间中存储的值为空值 ;
String s=”a”;是在字符串池里写入一个字符’a’,然后用s指向它。

好的,你的问题是关于Java字符串的使用,具体来说是关于String类创建字符串后如何使用equals和==判断字符串是否相等。那么我来回答你的问题。 在Java中,String是一个特殊的类,用于表示字符串。创建String对象有两种方式:使用字符串文字或者使用构造函数。 使用字符串文字创建字符串对象时,Java会自动将其转换为String对象: ``` String str1 = "Hello"; ``` 使用构造函数创建字符串对象时,需要显式地调用String类的构造函数: ``` String str2 = new String("Hello"); ``` 当我们需要比较两个字符串是否相等时,可以使用equals方法或者==运算符。 equals方法比较的是两个字符串的内容是否相等,而==运算符比较的是两个字符串的引用是否相等。具体来说,如果两个字符串的内容相同,那么它们使用equals方法比较的结果为true;如果两个字符串的引用指向同一个对象,那么它们使用==运算符比较的结果为true。 下面是一个示例,演示了如何使用equals方法和==运算符比较两个字符串是否相等: ``` String str1 = "Hello"; String str2 = new String("Hello"); String str3 = "Hello"; System.out.println(str1.equals(str2)); // 输出false,因为str1和str2的引用不同 System.out.println(str1 == str2); // 输出false,因为str1和str2的引用不同 System.out.println(str1.equals(str3)); // 输出true,因为str1和str3的内容相同 System.out.println(str1 == str3); // 输出true,因为str1和str3的引用相同 ``` 希望我的回答能够帮到你。如果你还有其他问题,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值