Java中关于字符串的基本使用以及内存图

创建字符串的3+1种方式

String字符串实现原理为byte[],使用的是ASCII编码
可以通过new 和 双引号两种方式创建对象

		byte[] bytes = {97,98,99,100};
        String s = new String(bytes); //第一种使用byte数组
        System.out.println(s);
        char[] chars = {'a','b','c'};
        String s2 = new String(chars);//第二种使用char数组
        System.out.println(s2);
        String s3 = new String();	// 第三种不带参数相当于""
        System.out.println(s3);

还可以直接用双引号,直接使用双引号也是创建字符串对象,此时是JVM自动完成的。

不同创建方式之间的区别

String str1 = "abc" ;
String str2 = "abc" ;
char[] charArray = {'a', 'b', 'c'};
String str3 = new String( charArray ) ;
System.out.println(str1 == str2); l// true
System.out.println(str1 ==str3); // false
System.out.println(str2 ==str3); // false

所有直接用双引号创建的字符串对象是在中的字符串常量池中创建的。
因为String底层为byte数组,创建字符串对象的时候会在中创建一个byte数组,常量池中的字符串对象存放着该byte数组的地址。
:此处为何存放的是地址,因为是引用类型,参考自定义的类。
请添加图片描述
而如果使用的new来创建字符串对象,则是直接在堆中创建,原理和上面类似,先创建byte数组,将地址传给String对象。

为何得出的比较结果不同

”==“ 在用于基本类型比较时是比较其数值,而在用于引用类型时比较的是其地址值。
所以就知道了为何str2和str3比较的结果为false了。
注意String对象不能直接用, >、< 和 等号 来比较
应该使用compareTo或者compareToIgnoreCase

		String s4 = "34";
        String s5 = "44";
        if (s4.compareTo(s5)>0){
            System.out.println("大");
        }else if (s4.compareTo(s5)<0){
            System.out.println("小");
        }else {
            System.out.println("等");
        }

字符串中的获取方法

String当中与获取相关的常用方法有:l

  1. public int length():获取字符串当中含有的字符个数,拿到字符串长度。
  2. public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。
  3. public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。)
  4. public int index0f ( String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值