加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java字符串实例化

发布时间:2020-12-15 02:19:24 所属栏目:Java 来源:网络整理
导读:为什么此代码返回“false”而不是“true”: package com.company;public class Main { public static void main(String[] args) { String fullName = "Name Lastname"; String name = "Name "; String lastName = "Lastname"; String firstNamePlusLastName
为什么此代码返回“false”而不是“true”:

package com.company;


public class Main {

    public static void main(String[] args) {

        String fullName = "Name Lastname";
        String name = "Name ";
        String lastName = "Lastname";
        String firstNamePlusLastName = name + lastName;

        System.out.println(fullName == firstNamePlusLastName);

    }
}

如果我没记错的话:

String firstNamePlusLastName = name + lastName;

应该创建一个指向内存中现有地址的String(字符串池),因为我们已经声明了一个带有值的字符串:“Name Lastname”,不应该自动插入到字符串池中,输出不应该是“true” “既然我们已经在字符串池中使用与String firstNamePlusLastname相同的字符串?

编辑:

我知道在测试两个字符串的内容相等时我应该使用.equals()方法,但我不想在上面的例子中这样做,我实际上确实想测试引用相等性,并且基于Java实习两个我在上面的代码中比较的字符串应该相等,但它们不是,它们应该指向内存中的相同地址,因为它们具有相同的内容,并且两个字符串都不是使用“new”关键字创建的.我想知道为什么会这样.

解决方法

字符串常量池在编译时创建.当你连接除最终参数之外的字符串文字/最终变量/最终字段时,它只使用池中的字符串,例如:

Concat Literals

String fullName = "Name Lastname";
String firstNamePlusLastName = "Name " + "Lastname";

System.out.println(fullName == firstNamePlusLastName);// true

Concat最终变量

String fullName = "Name Lastname";
final String name = "Name ";
final String lastName = "Lastname";
String firstNamePlusLastName = name + lastName;

System.out.println(fullName == firstNamePlusLastName);//true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读