• String中“+”号拼接字符串


    先试用代码进行测试

    String str1 = "hello";
    String str2 = "he"+"llo";
    String str3 = "he";
    Stirng str4 = str3 + "llo"; System.out.println(str1 == str2); //true System.out.println(str2 == str4); //false System.out.println(str1.equals(str4)); //true

    第一种结果,是程序在编译时,JVM编译器对字符串做了优化,str2就被优化成“hello”,str1和str2指向字符串常量池同一个字符串常量,所以“==”比较为true;

    第二种结果,String通过+号来拼接字符串的时候,如果有字符串变量(str3)参与,实际上底层会转成通过StringBuilder的append( )方法来实现拼接,StringBuilder 的 toString( )方法底层new了一个String对象,所以str4在堆内存中重新开辟了新空间,而str2指向常量池,所以str2 == str4为false。

    StringBuilder sb = new StringBuilder( );//先创建一个StringBuilder对象
    		sb.append(str3);
    		sb.append("llo");
    		str4 = sb.toString();
    

    第三种结果,String类中重写equals()方法,在String类中的equals()方法中,先使用“==”判断两个字符串的地址是否相等,如果相等,直接返回true;如果不相等,将两个字符串的转换成char数组,挨个比较其中的字符是否相等,有一个比较不一样的,直接返回false,比较完成之后,都一样,返回true;

    public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String)anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                            return false;
                        i++;
                    }
                    return true;
                }
            }
  • 相关阅读:
    CodeForces 731A Night at the Museum
    nyoj914 Yougth的最大化
    addEventListener或attachEvent都可以用bind代替
    答疑
    js判断是pc还是手机
    js实现xml转json和json转xml
    js实现xml转json
    margin重叠的解决办法
    去除移动端按钮点击时的阴影和rem标签垂直居中
    关于fiddler https 客户端 抓包配置
  • 原文地址:https://www.cnblogs.com/chuzijing/p/14692473.html
Copyright © 2020-2023  润新知