zoukankan      html  css  js  c++  java
  • 饿猫学java——String深入浅出


    String学习

    一,String介绍:

     

    来自package java.lang;

    String表示字符串,所谓字符串,就是一连串的字符;

    String类被final修饰,是常量:public final class String存储在常量池中

    常量池:

    JVM中一块独立的区域存放字符串常量和基本类型常量publicstatic final)。String使用privatefinal char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的.——可以被重新赋值,但是不能改变他自身。

     

     

     

    二,String对象比较:

    String中的"" 和null     

    public static void main(String[] args) {
    		String str = "";
    		String strNull = null;
    		System.out.println("str=" + ",strNull=" + strNull);
    		// 打印结果是str=,strNull=null
    	}
    单独使用""号创建的字符串都是常量,编译期就已经确定存储到常量池中;而null代表的是一个空的引用

    String中的"java" 和newString(java)     

    public static void main(String[] args) {
    		String str1 = "java";
    		String str2 = "java";
    		String strNew1 = new String("java");
    		String strNew2 = new String("java");
    		System.out.println(str1.equals(str2));//打印结果是true 都在池内
    		System.out.println(str1.equals(strNew1));//打印结果是true 都在池内
    		System.out.println(str1==str2);//打印结果是true 都在池内
    		System.out.println(str1==strNew1);//打印结果是false str1在池内,strNew1在池外
    		System.out.println(strNew1.equals(strNew2));
    		//true 都在池外,比较的是String的equals方法,他们都指向常量池中的同一个“” ;
    		System.out.println(strNew1==strNew2);//false 都是对象,但是 == 比较的是地址
    	}

    内存图:


    使用""创建的会直接加载到常量池中,常量在编译时期就能确定

    使用newString("")创建的对象会存储到堆内存中,是运行期新创建的;


    String的连接

    //无变量连接
    		String s1 = "我是"+"猫猫";//javac在生成.class文件的时候就会把+去掉
    								//编译期就能确定是s1 = "我是猫猫" 运行时会加载到内存池中
    		String s2 = "我是猫猫";
    		System.out.println(s1.equals(s2));//true
    		System.out.println(s1 == s2);//true


    使用只包含常量的字符串连接符如"aa"+ "bb"创建的也是常量,编译期就能确定,已经确定存储到常量池中;


    使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在堆中;

     

    //有变量的情况下
    		String s1 = "我是";
    		String s2 = "饿肚子的猫";
    		String s3 = s1 + s2;	
    		/*"我是饿肚子的猫"
    		 其内部其实是这样的
    		 StringBuilder sb = new StringBuilder();
    		 sb.append(s1);
    		 sb.append(s2);
    		 Stirng s3 = sb.toString();//返回一个池外的字符串new String()
    		 */
    		String s4 = "我是饿肚子的猫";
    		System.out.println(s3.equals(s4));//true 
    		System.out.println(s3 == s4);//false 

    String常用方法

    String():初始化一个新的String 对象,使其表示一个空字符序列,并不是返回空(不等于 null)。

    String(StringBuffer buffer):根据StringBuffer对象来创建String对象;

    String(StringBuilder builder):同上

    char charAt(int index):取字符串中指定位置的字符,index从0开始计算。

    String concat(String str):连接字符串,等同于“+”;

    boolean contentEquals(StringBuffer buffer):若二者包含的字符序列相同时就返回true;

    boolean equals(Object obj):将该字符串与指定对象比较,若二者包含的字符序列相等返回true;

    boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写;

    byte[] getBytes():将该字符串转换成byte数组;

    int indexOf(String str):找出str字符串在该字符串中第一次出现的位置;

    int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始;

    int lastIndexOf(String str) 返回指定子字符串在此字符串中最后一次出现处的索引;

    int length():返回当前字符串长度;

    String replace(char oldChar, char newChar) :返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有oldChar 得到的。

    String replaceAll(String regex, String replacement) 使用给定的 字符串replacement替换此字符串所有的regex字符串;

    boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始.

    String[] split(String regex):把字符串按指定的字符串分隔开。

    String substring(int beginIndex) 返回一个新的字符串,从beginIndex开始截取,它是此字符串的一个子字符串;

    String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串;[begin,end)

    char[] toCharArray() 将此字符串转换为一个新的字符数组。

    String toLowerCase() 将此 String 中的所有字符都转换为小写;

    String toUpperCase()转成大写;

    static String valueOf(基本类型obj):把基本类型值转成字符串;

    String trim() :忽略字符串前导空白和尾部空白。



    附注:(来自百度知道)
    final设计模式应用
    设计模式种模式叫做变模式Java通过final关键字容易实现模式讲解final成员时用程序Bat.java变模式例子对此感兴趣参考阎宏博士编写Java与模式讲解

     

  • 相关阅读:
    Unity3D移动端海水的实时绘制
    NGUI 3.x 深度管理及渲染优化
    【入门】从学生到成熟:游戏模块设计起步之抽象思维 (转)
    正弦波近似 http://blog.csdn.net/ring0hx/article/details/44492415
    Stack 栈 ----Queue 队列
    ORM
    CBV&FBV
    Django路由系统
    CRM
    深浅拷贝
  • 原文地址:https://www.cnblogs.com/znycat/p/4352654.html
Copyright © 2011-2022 走看看