zoukankan      html  css  js  c++  java
  • JAVA: String详解

    String 类用来存储字符串 ,是不可变的。

    1. 基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 
    他们之间的比较,应用双等号(==),比较的是他们的值。

    2. 复合数据类型(类) 
    当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。用 str.equals(str2) 方法来比较字符串的值是否相等。

    3. length属性、length()方法、size()方法的区别:

    • length属性 - 针对数组,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性。
    • length()方法 - 针对字符串String,如果想看这个字符串的长度则用到length()这个方法。 
    • size()方法 - 针对泛型集合,,如果想看这个泛型有多少个元素,就调用此方法来查看。

    如果要遍历一个字符串:

    String s = "abcde";
    strLen = s.length();//注意这里有括号
    
    for (int i=0; i<strLen;i++){
        // ...
    }

    或者这样:

     for (char ch:s.toCharArray()){
          // ...
    }

    char 转换成 String:

    String s = String.valueOf(ch); //效率最高的方法
    String s = String.valueOf(new char[]{'c'}); //将一个char数组转换成String 
    String s = Character.toString('c'); // Character.toString(char)方法实际上直接返回String.valueOf(char) 
    String s = new Character('c').toString();
    String s = new String(new char[]{'c'});
    String s = "" + 'c'; // 虽然这个方法很简单,但这是效率最低的方法

    Java中的String Object的值实际上是不可变的,是一个final的变量。

    所以我们每次对String做出任何改变,都是初始化了一个全新的String Object并将原来的变量指向了这个新String。

    而Java对使用+运算符处理String相加进行了方法重载。

    字符串直接相加连接实际上调用了如下方法:

    new StringBuilder().append("").append('c').toString(); 

    除了String,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么三者之间有什么区别呢?

    String - 不可变,每次修改并不修改string本身,而会额外创建一个对象。当频繁操作字符串时,就会产生很多临时变量,严重影响性能。

    StringBuffer - 可变,线程安全,性能略低。

    StringBuilder - 可变,非线程安全,性能高。可优先考虑使用

    StringBuilder 转为 String对象:

    StringBuiler str = new StringBuilder();
    String str2 = str.toString();
    package test;
    import java.lang.*;
    
    public class test1 {
        public static void main(String[] args) {
            // 创建一个空的StringBuilder对象
            StringBuilder str = new StringBuilder();
    
            // 追加字符串
            str.append("jaewkjldfxmopzdm");
    
            // 从后往前每隔三位插入逗号
            for(int i=str.length()-3; i>=0;i=i-3){
                str.insert(i, ",");
            }
    
            // 将StringBuilder对象转换为String对象并输出
            System.out.print(str.toString());
        }
    }
  • 相关阅读:
    在宏块级冗余可调的多描述视频编码算法方面取得进展(转载)
    C++单例模式
    C++手动实现库函数
    C#操作java平台生成的公钥
    C++之位操作符
    Windows 8 应用栏
    Windows 8 本地数据存储
    Win8的页面缓存
    操作符sizeof
    three.js结合geoJson绘制中国地图
  • 原文地址:https://www.cnblogs.com/dodocie/p/7487648.html
Copyright © 2011-2022 走看看