`

JAVA基础知识回顾-----String详解-----随想随写

阅读更多

1.String
 ①:String是不可变的;声明一个String对象,对他进行二次赋值时,实际上
 是再次创建了一个String对象
 ep:
    String s1="Hello";
    s1="World";
 解释:在s1="Hello",在内存中创建了一个String对象,而在s1="World"时,
又在内存创建了一个对象,而不是用"World"去覆盖"Hello";
 ②String是一个最终类(final),在src下是这样声明的:
   public final class String
 ③关于String对象之间的比较:
   ==:String为引用数据类型,所以比较的其实是它的hashCode值
   equals:比较的是String的值
   ep1:

   String s1="Hello";
   String s2="Hello";

 
   ep2:
 

  String s1=new String("Hello");
  String s2=new String("Hello");

 
   问题:s1==s2?
   解释:成立,首先会在内存(字符串常量池)中创建一个"Hello"的对象s1,
然后在创建s2的时候会将s1的值赋值给s2,同时也会将s1的hash值赋值给s2,
所以s1和s2其实指向的是内存的同一块区域,只是他们有着不同的名字;
下面src中String的构造方法可以印证上述所说:

  public String(String original) {

        this.value = original.value;

        this.hash = original.hash;
 
       }

 
  ④String类里的常用方法解析(按字母排序):
  String中我们需要用到的字段:
   

 /** The value is used for character storage. */

    private final char value[];


    /** Cache the hash code for the string */

    private int hash; // Default to 0

 

  a)方法一:public char charAt(int index)
   

 public char charAt(int index) {

        if ((index < 0) || (index >= value.length)) {
 
           throw new StringIndexOutOfBoundsException(index);

        }

        return value[index];

    }

 
    作用:获取string对象中对应下标得字符值(下标是从0开始的)
    返回值:char类型的一个字符
    解释:如果下标小于0或者下标大于等于字符串的长度,则抛出
    字符串下标越界异常(StringIndexOutOfBoundsException),否则
    则返回对应下标得字符值;
  b)方法二:public int compareTo(String anotherString)
 

   public int compareTo(String anotherString) {

        int len1 = value.length;

        int len2 = anotherString.value.length;

        int lim = Math.min(len1, len2);

        char v1[] = value;

        char v2[] = anotherString.value;


        int k = 0;

        while (k < lim) {

            char c1 = v1[k];

            char c2 = v2[k];

            if (c1 != c2) {

                return c1 - c2;

            }

            k++;

        }

        return len1 - len2;

    }

 
    作用:两个字符串进行比较
    返回值:int型,
           如果相等,则返回值为0;
           如果不等,且相互无子集关系,则返回不同的那两个字符的ASCII码的差值
           如果不等, 存在子集关系,则返回两个字符串的长度差
  c) 方法三:public String concat(String str)
   

 public String concat(String str) {

        int otherLen = str.length();

        if (otherLen == 0) {

            return this;

        }

        int len = value.length;

        char buf[] = Arrays.copyOf(value, len + otherLen);

        str.getChars(buf, len);

        return new String(buf, true);

    }

 
    作用:两个字符串进行连接
    返回值:连接后的新字符串
    解释:如果str为空字符串,则直接返回调用该方法的对象即可
    如果不为空字符串,则先建立一个字符数组,调用Arrays.copyOf()方法,
    将第一个源字符串的值赋值给字符数组,然后再调用getChars()方法,
    将第二个源字符串的值赋值给字符数组,最后返回一个String对象即可;

   d)方法四:public boolean equals(Object anObject)
 

    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;

            }
        }

        return false;

    }

 
    作用:对象比较
    返回值:如果两个对象的值相等,则返回true,否则返回false;
    解释:首先判断两个对象是否为同一个对象,如果是同一个对象则返回true;
          然后判断参数对象是否是String的实例,如果不是String的实例,则
          返回false,如果是,则倒叙比较String中的每个字符,如果全部相等,
          则返回true,否则返回false;
   e)方法五:public static String format(String format, Object... args)
    

public static String format(String format, Object... args) {

        return new Formatter().format(format, args).toString();

    }

 
   作用:格式化字符串
   返回值:格式化后的字符串
   ep:
  

String str=null;
   int year=2016,month=06,day=05;
   str=String.format("%d-%d-%d",year,month,day);
   System.out.println(str);

 

   e)方法六:public String trim()
   

 public String trim() {

        int len = value.length;

        int st = 0;

        char[] val = value;
    /* avoid getfield opcode */


        while ((st < len) && (val[st] <= ' ')) {

            st++;

        }

        while ((st < len) && (val[len - 1] <= ' ')) {

            len--;

        }

        return ((st > 0) || (len < value.length)) ? substring(st, len) : this;

    }
   

 作用:去除前导空格和后到空格
   返回值:返回去除空格后的字符串
   解释:st从左往右记录不出现空格的下标,len记录从右往左不出现空格的下标,最后根据
   下标截取字符串;

分享到:
评论
1 楼 YE_wolf 2016-06-05  
问题:
  如:String s="Hello";
对象s调用的构造方法是哪一个?是public String(String original)吗?

相关推荐

    java-string-similarity

    各种字符串相似度和距离算法的实现:Levenshtein,Jaro-winkler,n-Gram,Q-Gram,Jaccard索引,最长公共子序列编辑距离,余弦相似度......

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-070-Java基本语法-数据类型-String类型.avi 北京动力节点-Java编程零基础教程-071-Java基本语法-运算符-算术运算基本用法.avi 北京动力节点-Java编程零基础教程-072-Java基本...

    Java软件开发实战 Java基础与案例开发详解 3-10 java基础知识章节练习 共4页.pdf

    3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...

    java-string-similarity, 各种字符串相似性和距离算法.zip

    java-string-similarity, 各种字符串相似性和距离算法 java-string-similarity 实现不同字符串相似度和距离度量的库。 目前已经实现了许多算法( 包括Levenshtein编辑距离和 sibblings,jaro winkler,最长公共子序列...

    Java语言程序设计-基础篇-原书第8版

    《Java语言程序设计-基础篇-原书第8版》是一部深入浅出、全面系统地讲解Java编程基础知识的优秀教材,对于初学者和有一定基础的程序员来说,都是一个极佳的学习资源。本书由Cay S. Horstmann与Gary Cornell共同编写...

    mysql-connector-java-5.1.7-bin.jar

    "mysql-connector-java-5.1.7-bin.jar" 文件就是这个桥梁,它是一个Java归档(JAR)文件,包含了MySQL JDBC驱动的所有必要组件。 MySQL JDBC驱动,也被称为MySQL Connector/J,允许Java应用程序通过遵循JDBC API来...

    Java基础加密组件--BASE64加密

    Java基础加密组件--BASE64加密 使用方法: //加密 String a = EdptByBase64.encryptBASE64("/**/;pas58"); System.out.println(a); //还原 System.out.println(EdptByBase64.decryptBASE64(a)); 具体源码请参见: ...

    mysql-connector-java-commercial-5.1.30-bin.jar

    将要使用的是mysql-connector-java-5.1.30-bin-g.jar和mysql-connector-java-5.1.30-bin.jar 配置 在C:\Program Files\Java目录下建立mysqlforjdbc子目录,进入该目录将mysql-connector-java-5.1.30-bin.jar到该...

    Java中的正则表达式 -- 示例详解

    本文将对Java中正则表达式的基础概念和常用语法进行详细解释。 1. **元字符和转义字符**: - `\`:反斜杠用于转义特殊字符,如`\t`表示制表符,`\n`表示换行,`\r`表示回车。 - `\d`:匹配数字,等同于`[0-9]`。 ...

    mysql-connector-java-5.1.10-bin.jar

    《MySQL数据库连接器Java驱动详解——mysql-connector-java-5.1.10-bin.jar》 MySQL数据库在软件开发中占据着重要的地位,而与之交互的Java应用程序通常依赖于`mysql-connector-java`这个数据库驱动。本文将深入...

    java 字符串a-z排序

    本知识点将详细讲解如何实现这个功能。 首先,我们需要理解字符串在Java中的本质。在Java中,字符串是不可变的对象,由`String`类表示。这意味着一旦创建了一个字符串对象,它的内容就不能被修改。因此,如果我们要...

    Java基础知识笔记详细版-菜鸟翻阅必备

    ### Java基础知识笔记详细版-菜鸟翻阅必备 #### 一、Java概述 1. **Java语言发展史**: - Java由Sun Microsystems公司于1995年推出。 - 最初由James Gosling领导的设计团队开发,目标是用于家用电器的编程。 - ...

    Java软件开发实战 Java基础与案例开发详解 2-7 java上机练习 共5页.pdf

    3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...

    String3.1-java堆和栈---马克-to-win Java视频

    String3.1-java堆和栈---马克-to-win java视频 马克Java社区 马克towin

    JavaWeb基础知识汇总-java web

    ### JavaWeb基础知识汇总 #### 一、Java Web入门概述 - **C/S(Client/Server,客户端/服务器)结构** - 客户端需要安装特定的软件才能与服务器通信。 - 数据交互通常需要通过特定的应用程序进行。 - **B/S...

    mysql-connector-java-5.1.47-bin.jar

    标题中的"mysql-connector-java-5.1.47-bin.jar"正是这个驱动程序的一个特定版本,5.1.47是其版本号,表示这是一个较旧但仍然广泛使用的稳定版本。 在Java编程中,当你需要在应用程序中连接到MySQL数据库时,这个...

    Java软件开发实战 Java基础与案例开发详解 9-5 java程序国际化的实现 共9页.pdf

    3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...

    Java核心知识总结-笔记

    【Java核心知识总结-笔记】 JavaSE高级部分的讲解涵盖了重要的String类、集合以及IO流。String类在Java中扮演着至关重要的角色,因为它是最常用的数据类型之一,用于存储和处理文本信息。以下是对String类的详细...

Global site tag (gtag.js) - Google Analytics