博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
饿猫学java——String深入浅出
阅读量:6610 次
发布时间:2019-06-24

本文共 3301 字,大约阅读时间需要 11 分钟。

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变模式例子对此感兴趣参考博士编写《》书讲解

 

转载于:https://www.cnblogs.com/znycat/p/4352654.html

你可能感兴趣的文章
在windows下与linux虚拟机进行文件共享
查看>>
php 图形用户界面GUI 开发
查看>>
正则表达式详解
查看>>
LeetCode问题5
查看>>
AIX系列------ISO挂载
查看>>
如何打开被管理员禁止的注册表编辑器
查看>>
java根据经纬度计算距离
查看>>
CF976D. Degree Set
查看>>
我的友情链接
查看>>
Nginx 在window server 2008R2上装有IIS启动不了
查看>>
Python运行效率低的原因
查看>>
NSD基础交换-子网划分
查看>>
根据供词确定谁是凶手
查看>>
AgileEAS.NET企业级敏捷软件开发平台 5.0 简介
查看>>
zabbix配置通过远程命令来发送邮件
查看>>
在接受人民币付款后 中国区App Store下载量出现井喷
查看>>
新建的硬盘-mount
查看>>
php正则验证车牌格式的函数
查看>>
PHP金钱数字转金钱大写
查看>>
Xamarin入门浅析
查看>>