欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

String

程序员文章站 2022-04-15 18:57:35
String1. 概念String是引用数据类型,表示字符串(其实是由多个字符组成的)2 .String类特点String是final修饰的,所以是最终类,最终类是不能被继承的,既然不能被继承也就意味着里面的方法不能被重写3. 字符串常量池字符串是常量,所有的字符串常量都是存储在常量池中的,每个常量在常量池中都有地址;在常量池中,如果定义的常量在常量池中已经存在,则不会再进行创建,而是直接拿来用,如果不存在就创建一个常量扔进常量池中/4.String对象的创建形式public...

String

1. 概念

String是引用数据类型,表示字符串(其实是由多个字符组成的)

2 .String类特点

String是final修饰的,所以是最终类,最终类是不能被继承的,既然不能被继承也就意味着里面的方法不能被重写

3. 字符串常量池

字符串是常量,所有的字符串常量都是存储在常量池中的,每个常量在常量池中都有地址;在常量池中,如果定义的常量在常量池中已经存在,则不会再进行创建,而是直接拿来用,如果不存在就创建一个常量扔进常量池中
/

4.String对象的创建形式

public static void main(String[] args){
    String str = new String("haha");
    String str2 = new String("haha");
    System.out.println(str == str2);

    String str3 = "hello";
    String str4 = "hello";
    System.out.println(str3 == str4);

    //面试题:下面的代码创建了几个对象
    String str5 = "how"+"are"+"you";//1
    String str6 = "howareyou";
    System.out.println(str5 == str6);

    String str7 = new String("happy");//2

    String str8 = "so";
    String str9 = "handsome";
    String str10 = "sohandsome";
    String str11 = str8 + str9;
    System.out.println(str10 == str11);
}

5.常见方法的使用

String str = "hello";
//charAt() 获取指定索引对应的char值
System.out.println(str.charAt(0));
//indexOf() 返回指定字符对应的下标
System.out.println(str.indexOf("ll"));
//lastIndexOf() 返回指定字符对应的下标(反向查找)
System.out.println(str.lastIndexOf('l'));
//compareTo() 比较两个字符串的先后顺序(自然排序)
//ASCII码表 a对应数字97 b 98 A65 B66
System.out.println("abc".compareTo("aba"));
//contains() 是否包含指定的字符串
System.out.println("hello world".contains(str));
//endsWith() 以指定字符结尾
System.out.println("www.baidu.com".endsWith(".cn"));
//isEmpty() 判断指定字符串是否为空(是否是空字符串 null代表空对象)
System.out.println(" ".isEmpty());
//split() 根据指定的字符对字符串进行分割
String imgs = "1.jpg,2.jpg,3.jpg";
String[] imgsArr = imgs.split(",");
for(int i=0;i<imgsArr.length;i++) {
    System.out.println(imgsArr[i]);
}
System.out.println("------------");
//获取指定图片的后缀 找到最后一个.,一直到字符的结尾
String picPath = "f1ew5f1ew56f1ew5.aa.jpg";
int startIndex = picPath.lastIndexOf(".");
int endIndex = picPath.length();
//获取到的后缀 subString(int startIndex ,int endIndex) 包含开始,不包含结束
//String suffix = picPath.substring(startIndex, endIndex);
//指定开始的位置,默认结束的位置是直到字符串的末尾
String suffix = picPath.substring(startIndex);
System.out.println(suffix);
//trim() 去掉字符串前后的空白
String trim = " a a ";
System.out.println(trim.trim());

**注意:**基本数据类型和引用数据类型之间不能进行强制类型转换

6.数字转字符串的方式

int num = 5;
String numStr = num + "";
//valueOf() 将指定的类型转换为String类型
String str = String.valueOf(num);
System.out.println(str);
String str = new String("haha");
String str2 = new String("haha");
System.out.println(str == str2);
//字符串中的equals方法是先比较地址,如果地址不同再比较值是否相同
System.out.println(str.equals(str2));

//源码分析
if (anObject instanceof String) {//判断传递过来的对象是否是字符串类型
    String anotherString = (String)anObject;//将对象强制类型转换为String
    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++;
        }*/
        for(int i=0;i<v1.length;i++){
            if(v1[i] != v2[i]){
                return false;
            }
        }
        return true;
    }
}

7.

面试题:数组当中使用的是length属性还是length方法?

数组中使用的length属性,String中使用的是length()

面试题(重点):java中==和equals的区别

==号如果比较的是基本数据类型,那比较的值是否相等,如果比较的是引用数据类型,那比较的是地址是否相同;在String类中equals先比较地址,地址不相同再比较值是否相同。

8.总结

package cn.yunhe.str;

public class StringDemo {

	public static void main(String[] args) {
		method4();
	}
	
	/**
	 * 字符串对象的创建
	 * 1、字符串本身是引用数据类型,可以通过new关键字进行对象的创建
	 * 2、字符串又比较特殊,它也可以直接赋值的形式进行字符串对象的创建
	 * 上述的区别在哪里呢?
	 * API中说明:字符串都是常量
	 * 字符串常量都在常量池(方法区)中存储,是有自己的地址的,通过new关键字创建出来的对象在堆内存中
	 * 常量池:如果要指定某一个常量进行使用,首先会先去常量池中查看该常量是否已存在,如果已存在直接拿来用,如果不存在就创建一个放进常量池中
	 */
	public static void method4() {
		String str = new String("haha");
		String str2 = new String("haha");
		System.out.println(str == str2);//false
		String str3 = "hehe";
		String str4 = "hehe";
		System.out.println(str3 == str4);//true
		System.out.println("------");
		
		String str6 = "hello";
		String str7 = "world";
		String str8 = "helloworld";
		String str9 = str6 + str7;//对已经创建好的对象进行了拼接
		System.out.println(str8 == str9);//false
		System.out.println(str8.equals(str9));//true
		System.out.println("------");
		
		String str0 = "a"+"b"+"c";//先拼接再创建对象
		String str01 = "abc";
		System.out.println(str0 == str01);
		System.out.println(str0.equals(str01));
	}
	
	/**
	 * 1、地址判断
	 * 2、将传递过来的字符串转换为字符数组,判断长度是否相同
	 * 3、根据下标的位置,逐个比较字符是否相同
	 * 
	 * 面试题:==和equals的区别
	 * ==用于基本数据类型时比较的是值,用于引用数据类型比较的时地址
	 * equals在字符串中是先比较地址后比较内容
	 */
	public static void method3() {
		//equals() 重写了Object中的equals方法,先比较地址,地址不同,然后比较内容,地址相同就直接返回true
		String str = new String("hello");
		String str2 = new String("hello");
		System.out.println(str == str2);//false 地址不同
		System.out.println(str.equals(str2));//true
	}
	
	/**
	 * String中有用的且常用的方法
	 */
	public static void method2() {
		//replace() 替换
		String url = "http://www.news.baidu.com";
		String newUrl = url.replace("baidu", "jd");
		System.out.println(newUrl);
		//substring() 截取 如果只有一个参数,代表开始,直到末尾结束
		System.out.println(url.substring(7));
		//substring() 截取 如果有两个参数,参数一代表开始,参数二代表结束位置(不包含)
		System.out.println(url.substring(7, url.length()));
		//split() 分割 参数代表要拆分的依据 \\.
		String[] urlArr = url.split("\\.");
		System.out.println(urlArr[urlArr.length-2]);
		System.out.println("转换为纯大写:"+url.toUpperCase());
	}
	
	/**
	 * String中的有用的不是很常用的方法
	 */
	public static void method() {
		String str = "hi juni";
		System.out.println("指定索引出的char值:"+str.charAt(1));
		System.out.println("指定char值对应的索引:"+str.indexOf('i'));
		System.out.println("指定char值对应的索引:"+str.lastIndexOf('i'));
		String compare1 = "adc";
		String compare2 = "aac";
		System.out.println(compare2.compareTo(compare1));
		System.out.println(compare2.concat(compare1));
		System.out.println("是否包含指定的字符串:"+str.contains("hello"));
		String url = "https://www.baidu.com";
		System.out.println(url.endsWith("cn"));
		System.out.println(url.startsWith("http"));
		//将字符串转换为字节数组
		byte[] bts = str.getBytes();
		//print(bts);
		System.out.println("判断字符串是否为空字符:"+"".isEmpty());
	}
	
	
	/**
	 * String中的构造方法
	 */
	public static void constructorMethod() {
		String str = new String();
		System.out.println(str+"--"+null);
		
		String str2 = new String("haha");
		System.out.println(str2);
		String str3 = "heihei";
		System.out.println(str3);
		
		byte[] byteArr = {97,99,98,100};
		String str4 = new String(byteArr);
		System.out.println(str4);
		
		char[] charArr = {'a','b','c'};
		String str5 = new String(charArr);
		System.out.println(str5);
		//源码的写法
		String result = "";
		for(int i=0;i<charArr.length;i++) {
			result = result + charArr[i];
		}
		System.out.println(result);
	}
	
	/**
	 * 遍历数组
	 * @param arr
	 */
	public static void print(byte[] arr) {
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
	}
}

本文地址:https://blog.csdn.net/qq_52232797/article/details/109648525