java 基础知识整理 (String对象)

public class HelloWorld {
    public static void main(String []args) {
        String str1 = "hello";
        String str2 = new String("hello");
        System.out.println(str1 == str2);
    }
}

上面代码运行结果为 false,由于 ” == “在比较时比较的是 string 对象的地址,将 “==”改成 str1.equals(str2)后,运行结果为 true, equals()方法比较的是 string对象地址所指向的内容。

public class HelloWorld {
    public static void main(String []args) {
        String str2 = new String("hello").intern();
        String str1 = "hello";
        System.out.println(str1 == str2);
    }
}

上面代码运行结果返回值为 true ,由于String的两种实例化方法有区别
String采用了共享设计模式

String str1 = "hello";

采用直接赋值的模式进行实例化对象,该实例化对象将自动保存到对象池之中,若下次还采用直接赋值实例化对象,可以直接使用。

String str2 = new String("hello");

采用构造方法进行实例化,会开辟两块堆内存空间,有一块堆内存空间会成为垃圾空间。而且该字符串常量不会保存在对象池之中。

String str2 = new String("hello").intern();

该方法调用 intern()方法会手工入池。

String的两种不同实例化方法的区别
  • 直接赋值 : 只会开辟一块堆内存空间,并且该字符串对象可以直接保存在对象池之中以供下次使用
  • 构造方法赋值:会开辟两块堆内存空间,有一块堆内存空间会变成垃圾空间,而且不能保存在对象池之中,可以用 intern()方法手工入池。

字符串的底层实现是字符数组,由于数组长度在定义之后是不可变的,字符串长度不可改变。

字符串与字符数组转换
public class HelloWorld {
    public static void main(String []args) {
        String str = "hello";
        char [] data = str.toCharArray();
        for(int i=0;i<data.length;i++){
            System.out.print(data[i]+",");
        }
        System.out.println();
        System.out.println(new String(data));
        System.out.println(new String(data,2,2));
    }
}   

输出结果为:

h,e,l,l,o,
hello
ll
字符串的比较
public class HelloWorld {
    public static void main(String []args) {
        String str1 = "hello";
        String str2 = "Hello";
        System.out.println(str1.equals(str2));//区分大小写
        System.out.println(str1.equalsIgnoreCase(str2));//不区分大小写
        System.out.println("a".compareTo("A"));//大于的话返回正数
        System.out.println("ab".compareTo("ab"));//相等的话返回0
        System.out.println("AC".compareTo("ac"));//小于的话返回负数
    }
}

运行结果为

false
true
32
0
-32
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值