JAVA基础之字符串

来源:互联网 发布:unity3d中文版软件 编辑:程序博客网 时间:2024/06/04 08:52

一、字符串对象创建方式

String str = "abc";String str1 = new String("abc");

二、基本数据类型的包装类

8种基本数据类型:byte short int long char boolean float double

8种基本类型——对应引用类型

byte——Byte

short——Short

int——Integer

long——Long

float——Float

double——Double

char——Character

boolean——Boolean


包装类构造方式及其和基本数据类型之间的转化(包装类的作用:将基本数据类型包装成为引用数据类型,从而可以使用一些属性和方法)

int i=10;//基本类型//基本类型----》引用类型Integer ii=new Integer(i);System.out.println(ii.intValue());//引用类型----》基本类型int iii=ii;System.out.println(iii);//String  和基本类型之间的转化:String strData="12.6";//1、String----》基本类型:基本类型对应封装类.parseXXX()//System.out.println(Integer.parseInt(strData)+1);//System.out.println(Double.parseDouble(strData));//2、基本类型转成String:String.valueOf(i)//System.out.println(i+"");System.out.println(String.valueOf(i)+1);
三、StringTokenizer

String str="1,2!3.4,5,6";/*String[] arr=str.split(",");for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}*/StringTokenizer st=new StringTokenizer(str, ",!.");while(st.hasMoreTokens()){//判断是否有下一个元素String element=st.nextToken();//游标下移  取出元素System.out.println(element);}
四、Character
System.out.println(Character.isDigit('3'));System.out.println(Character.isLetter('r'));System.out.println(Character.isLetterOrDigit('t'));/*练习:用户键盘输入一个字符串,判断该字符串是否是合法用户名  (用户名长度5-16位、数字、字母和_组成、不能以数字开头)*/public static boolean checkUserName(String userName){if(userName.length() >=5 && userName.length() <= 16){if(!Character.isDigit(userName.charAt(0))){char ch='a';for(int i=0;i<userName.length();i++){ch=userName.charAt(i);if(!(Character.isLetterOrDigit(ch) || ch =='_')){System.out.println("必须由数字、字母和_组成");return false;}else if(i == userName.length()-1){return true;}}}else{System.out.println("首字母不能是数字");return false;}}else{System.out.println("长度不合法");return false;}return false;}
五、Object和toString()方法

/*ToString()方法的原文定义:getClass().getName() + '@' + Integer.toHexString(hashCode()) ,一般情况在我们自定义的类中需要重写该方法:*/public class People {private String code;private String name;private String sex;public People(String code, String name, String sex) {super();this.code = code;this.name = name;this.sex = sex;}public People() {}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "People [code=" + code + ", name=" + name + ", sex=" + sex + "]";}public static void main(String[] args) {People p=new People("001","张三","男");System.out.println(p);}}
六、JVM内存划分

1.程序计数器:CPU执行程序指令

2.本地方法栈:操作系统的一些函数需要的参数

3.虚拟机栈:JAVA中的方法中的参数(局部变量、对象引用)

4.堆:对象(实例变量)

5.方法区
七、常量池

1.静态常量池

class文件中(编译后)

2.运行时常量池

必须将class文件装载后,在方法区中。

字符串常量池:相同序列的字符串只允许出现一次。

笔试题:比较以下创建字符串对象的方法

1.String str = "abc";

存储在常量池中,且相同序列的字符串只有一个

2.String str1 = new String("abc");

str1引用的是堆内存中的字符串对象。

如果字符串常量池没有"abc",则先在常量池中创建"abc",然后再到堆内存中创建"abc";

如果常量池中有"abc",则旨在堆内存中创建一个对象。

八、==和equals()方法

1.==一般用来比较基本数据类型是否想等,如果两个非空的引用x和y,引用同一个对象,==也返回true

2.equals()、原生定义在Object类中,对于任何非空参考值x和y ,当且仅当x和y引用相同对象( x == y具有值true )时,该方法返回true 。 

一般情况,子类需要重写Object的equals(),以满足子类的需求。

九、StringBuffer 和 StringBuilder

StringBuffer sb=new StringBuffer("abc");//1、在sb的后面追加123//b.append("123");//2、删除指定区间的字符序列[)//sb.delete(1, 2);//3、在指定位置插入值sb.insert(0, "A");//4、字符串反转sb.reverse();System.out.println(sb);
笔试题:String 、StringBuffer和StringBuilder之间的区别
1、使用性能
StringBuilder  > StringBuffer > String 
2、线程安全
StringBuffer 更安全

线程安全(同步):同一时刻只能有一个线程来访问资源。
线程不安全(异步):同一时刻,运行多个线程同时访问该资源。