zoukankan      html  css  js  c++  java
  • java——String、StringBuffer、StringBuilder、包装类、单双引号

    String

      String是一个特殊的类,被定义为final类型,为字符串常量,同样的字符串在常量池中不能重复。

      但是由于使用关键字new创建新的字符串,java会在对中分配新的空间,这样即使字符串相同返回的引用也不相同。

    public class Exp {
        public static void main(String[] args) {
            String a = "hello";
            String b = "hello";
            String c = new String("hello");
            System.out.println(a==b); //true
            System.out.println(a==c); //false
        }
    }

      而StringBuilderStringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

      Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

     

    StringBuilderStringBuffer:  对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。StringBuffer支持多线程,且具有线程安全性,该类的方法可以同步执行。缓冲区字符串的初始长度为字符串长度加16。str.capacity()

      注意这里的equals()方法:String重写了equals(),这里的equals()比较的是String的值,而StringBuffer()继承了Object类的equals(),这个equals()比较的是地址。

     

      记录一个子串在整串中出现的次数:

    package package_name;
    public class exp {
        public static void main (String[] args) {
            String str = "abcssssasasasnddbiweabcabcahabcccccabqwertadabc";
            String key = "abc";
            int res = getCounts(str, key);
            System.out.println(res);
        }
        public static int getCounts(String str, String key) {
            int count = 0;
            int index = 0;
            if(!str.contains(key)) {
                return count;
            }
            while((index = str.indexOf(key) )!= -1) {
                str = str.substring(index + key.length());
                count++;
            }
            return count;
        }
    }

    包装类:

      Java并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据类型转化成对象,便于操作。比如:集合的操作中。这时,我们就需要将基本数据类型转化成对象。

      装箱和拆箱的自动转换是在编译阶段完成的。

    基本数据类型对应的包装类
    byte Byte
    short Short
    int Integer
    long Long
    char Character
    float Float
    double Double
    boolean Boolean

      字符串排序:

    package package_name;
    import java.util.Arrays;
    public class exp {
        private static final String SPACE_SEPARATOR = " ";
        public static void main (String[] args) {
            String str = "20 78 9 -7 88 36 29";
            System.out.println(str);
            str = sortStringNumber(str);
            System.out.println(str);
        }
        public static String sortStringNumber(String str) {
            String[] str_arr = stringToArray(str);
            int[] int_arr = toIntArray(str_arr);
            mySortArray(int_arr);
            String temp = arrayToString(int_arr);
            return temp;
        }
        public static String[] stringToArray (String str){
            String[] str_arr = str.split(SPACE_SEPARATOR);
            return str_arr;
        }
        public static int[] toIntArray(String[] str_arr) {
            int[] str_int = new int[str_arr.length];
            for(int i=0;i<str_arr.length;i++) {
                str_int[i] = Integer.parseInt(str_arr[i]);
            }
            return str_int;
        }
        public static void mySortArray(int[] int_arr) {
            Arrays.sort(int_arr);
        }
        public static String arrayToString(int[] int_arr) {
            StringBuffer sb = new StringBuffer();
            for(int i=0; i<int_arr.length; i++) {
                sb.append(int_arr[i] + SPACE_SEPARATOR);
            }
            return sb.toString();
        }
    }

     在Python中单双引号没什么区别,只是为了字符串中引入单双引号方便,但是在java中单双引号是不同的:

      单引号:引的数据 是char类型的
      双引号:引的数据 是String类型的

  • 相关阅读:
    MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法
    mysql运维-slave_skip_errors
    linux 的mysql 主从备份
    linux 查看和设置主机名
    mysql连接数
    红帽6.9搭建yum源的2种方式(HTTP和本地)
    linux 重启服务器命令
    Linux开机启动顺序启动顺序及配置开机启动
    在Windows Server 2012的Task Scheduler里面配置自动发送邮件
    "Cannot find one of more components. Please reinstall the application"--安装VS2013之后不能正常打开的处理办法
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9579017.html
Copyright © 2011-2022 走看看