zoukankan      html  css  js  c++  java
  • String类详解(1)

    首先String是一个类。 

    1,实例化String类方法。

    1)直接赋值:String name="haha";

    2)通过关键字:String name=new String("haha");

    2,String类的数据比较。

    首先回顾一下,基础数据的比较使用"=="比较。

    public class StringDemo04{
        public static void main(String args[]){
            String str1 = "hello" ;                    // 直接赋值
            String str2 = new String("hello") ;        // 通过new赋值
            String str3 = str2 ;                    // 传递引用,共用一个堆地址空间。
            System.out.println("str1 == str2 --> " + (str1==str2)) ;    // false
            System.out.println("str1 == str3 --> " + (str1==str3)) ;    // false
            System.out.println("str2 == str3 --> " + (str2==str3)) ;    // true
        }
    };

    现在使用的判断相等是判断地址空间相等,判断的值是地址值。

    如果要想判断其内存是否相等,则必须要使用String类中提供的equals()方法完成。

    此方法使用如下:

    public class StringDemo05{
        public static void main(String args[]){
            String str1 = "hello" ;                    // 直接赋值
            String str2 = new String("hello") ;        // 通过new赋值
            String str3 = str2 ;                    // 传递引用
            System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ;    // true
            System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ;    // true
            System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ;    // true
        }
    };

    结论:String两种比较方式:

    1)一种是“==”比较的是地址值。

    2)一种使用equals()完成,比较的是具体的内容,比较常用。

    3,两种实例化的区别。

    字符串的特征:

    1)一个字符串就是String的匿名对象。(即没有分配栈内存空间)

    public class StringDemo06{
        public static void main(String args[]){
            System.out.println("hello".equals("hello")) ;
        }
    };

    了解此后,实际之前操作:

    String name="hehe";

    就表示将一个堆内存空间指给了栈内存空间。

    只有掌握了这一点后,才能分析出使用哪种方式实例化更合适。

    public class StringDemo07{
        public static void main(String args[]){
            String str1 = "hello" ;                    // 直接赋值
            String str2 = "hello" ;                    // 直接赋值
            String str3 = "hello" ;                    // 直接赋值
            System.out.println("str1 == str2 --> " + (str1==str2)) ;    // true
            System.out.println("str1 == str3 --> " + (str1==str3)) ;    // true
            System.out.println("str2 == str3 --> " + (str2==str3)) ;    // true
        }
    };

    这里没有用equals()方法,但是都是ture。

    以上三个的内存地址都一样,

    因为三个对象指向同一个堆内存空间,所有使用直接赋值能够节省内存空间。

    而使用new String()方式。

    public class StringDemo08{
        public static void main(String args[]){
            String str1 = new String("hello") ;    
        }
    };

    使用直接赋值方式只要一个空间即可,而new String()则会开辟两个地址空间。所以最好使用直接赋值。

    2)字符串的内容不可改变。

    这是一个重要特征。

    public class StringDemo09{
        public static void main(String args[]){
            String str = "hello" ;        // 声明字符串
            str = str + " world!!!"    ;    // 修改字符串
            System.out.println("str = " + str) ;
        }
    };

    这里字符串对象是改变了,但是字符串并没有改变。

    实际上字符串内容的改变,改变的只是内存地址的引用关系。

    所以在开发中要避免以下情况出现。

    public class StringDemo10{
        public static void main(String args[]){
            String str1 = "LiXingHua" ;        // 声明字符串对象
            for(int i=0;i<100;i++){            // 循环修改内容
                str1 += i ;                    // 字符串的引用不断改变
            }
            System.out.println(str1) ;
        }
    };

    但是这样的操作,要断开连接100次才能完成。这种操作性能很低,应避免使用。

  • 相关阅读:
    【2020-11-01】从身边人开始输出自己的价值
    【一句日历】2020年11月
    【2020-10-31】继续解锁自己内心的矛盾
    【2020-10-29】静下心来,书中自有黄金
    【2020-10-28】平凡人终归还是要回归到小日子上
    【2020-10-27】抗衡自己的摇摆幅度
    【2020-10-26】市场驱动学习和进步
    【2020-10-25】窜着野炊的心干着农民的活
    暑假集训2016day3T1 欧拉回路(UOJ #117欧拉回路)(史上最全的欧拉回路纯无向图/有向图解析)
    leetcode1282
  • 原文地址:https://www.cnblogs.com/alsf/p/5513750.html
Copyright © 2011-2022 走看看