Java中的String类详解

String类

String类的概念和不变性

  • API中的String类的描述,发现String 类代表字符串

  • Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。

  • 字符串是常量,在创建之后不能更改

  • 其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的。

  • 源码分析,String类底层采用的是字符数组:
    private final char value[]
    private 修饰说明value只能在String类内部使用,而且又没有提供get方法,所以外部无法获取value数组,就无法改变数组中元素的值
    final修饰说明value是常量,一旦创建,就不能被改变,value一旦被初始化成某个数组,将永远指向这个数组,不可能再指向其它的数组了

       *   String类特点:
       *     一切都是对象,字符串事物 "" 也是对象
       *     类是描述事物,String类,描述字符串对象的类
       *     所有的 "" 都是String类的对象
       * 	 字符串是一个常量,一旦创建,不能改变
    

		public class StringDemo {
			public static void main(String[] args) {
				//引用变量str执行内存变化
				//定义好的字符串对象,不变
				String str = "abc";
				System.out.println(str);
				str = "edf";
				System.out.println(str);
				}
				}

String类创建方式和比较

  • 创建对象的数量比较
    • String s3 = “abc”;
      • 在内存中只有一个对象。这个对象在字符串常量池中
    • String s4 = new String(“abc”);
      • 在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
public class StringDemo2 {
	public static void main(String[] args) {
		//字符串定义方式2个, 直接=  使用String类的构造方法
		String str1 = new String("abc");
		String str2 = "abc";
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str1==str2);//引用数据类型,比较对象的地址 false
				System.out.println(str1.equals(str2));//true
			}
		}

String类重写了父类Object的equals方法,有自己的判别方式

String类构造方法

  • a: 常见构造方法
    * public String():空构造
    * public String(byte[] bytes):把字节数组转成字符串
    * public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
    * public String(String original):把字符串常量值转成字符串

      		 *  定义方法,String类的构造方法
      		 *  String(byte[] bytes)  传递字节数组
      		 *  字节数组转成字符串
      		 *  通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
      		 *  平台 : 机器操作系统
      		 *  默认字符集: 操作系统中的默认编码表, 默认编码表GBK
      		 *  将字节数组中的每个字节,查询了编码表,得到的结果
      		 *  字节是负数,汉字的字节编码就是负数, 默认编码表 ,一个汉字采用2个字节表示
      		 *  
      		 *  String(byte[] bytes, int offset, int length) 传递字节数组
      		 *  字节数组的一部分转成字符串
      		 *  offset 数组的起始的索引
      		 *  length 个数,转几个   , 不是结束的索引
    
public static void function(){
					byte[] bytes = {97,98,99,100};
					//调用String类的构造方法,传递字节数组
					String s = new String(bytes);
					System.out.println(s);
					byte[] bytes1 ={65,66,67,68,69};
				//调用String构造方法,传递数组,传递2个int值
				String s1 = new String(bytes1,1,3);
				System.out.println(s1);
			}
		}

String类的内部方法

		* int length(): 返回字符串的长度
		* String substring(int beginIndex,int endIndex): 获取字符串的一部分
		* String substring(int beginIndex): 获取字符串的一部分
		* boolean startsWith(String prefix): 判断一个字符串是不是另一个字符串的前缀,开头
		* boolean endsWith(String prefix): 判断一个字符串是不是另一个字符串的后缀,结尾
		* boolean contains (String s): 判断一个字符串中,是否包含另一个字符串
		* int indexOf(char ch):  查找一个字符,在字符串中第一次出现的索引,被查找的字符不存在,返回-1
		* byte[] getBytes(): 将字符串转成字节数组,此功能和String构造方法相反,byte数组相关的功能,查询编码表
		* char[] toCharArray(): 将字符串转成字符数组,功能和构造方法相反
		* boolean equals(Object obj): 方法传递字符串,判断字符串中的字符是否完全相同,如果完全相同返回true
		* boolean equalsIgnoreCase(String s): 传递字符串,判断字符串中的字符是否相同,忽略大小写		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值