Java基础知识—字符串和数组

1.1 字符串的创建与存储的机制

  1. 对于String s1 = new String(“abc”)和语句String s2 = new String(“abc”),存在两个引用对象s1、s2,两个内容相同的字符串对象"abc",它们在内存中的地址是不同的,只要有new总会生成新的对象;
  2. 对于String s1 = "abc"与String s2 = “abc”,JVM存在一个字符串池,里面保存了许多String对象,可以被共享使用,s1和s2引用的是同一个常量池中的对象;Java在创建一个字符串常量的时候会首先在字符串常量池中查找是否已经有相同的字符串被定义,判断依据是String类的equals(Object obj)方法的返回值,没有创建就加入字符串池中;

两种字符串的存储方式
引申:
对于String类型的变量s,赋值语句s=null,其中s是一个字符串类型的引用,不指向任何一个字符串,而赋值语句s=" "中的s是一个字符串类型的引用,指向另外一个字符串,两者不同;

new String(“abc”)创建了几个对象?
答:一个或者两个,如果常量池中原来有"abc",那么只创建一个对象;如果常量池中没有字符串"abc",就会创建两个对象;

1.2 “==”、equals和hashCode有什么区别

"==",对于基本数据类型,可以直接判断其对应的值是否相等,对于引用类型是判断其两个对象的内存中的地址是否相同;
equals,每一个Java类都继承自Object类,默认的equals就是采用"=="运算符。对于每个对象都具有equals这个方法,Stiring类中的equals方法是用于比较堆中的内容是否相等;
hashCode(),用来鉴定两个对象是否相等,用户一般不会调用,相当于对于一个对象的编码,它返回的是int型;

1.3 String、StringBuffer、StringBuilder和StringTokenizer有什么区别

String是不可变类,一旦被创建,其值将不会被修改;StringBuffer是可变类,对象被创建以后仍然可以对其值进行修改。

String与StringBuffer的另一个区别是在实例化String时可以通过构造函数(String s1 = new String(“world”)),也可以利用赋值(String s = "Hello")方式初始化;StringBuffer只能通过(StringBuffer s = new StringBuffer(“Hello”))初始化;

String字符串修改的规则是:实现方法是首先创建一个StringBuffer,其次是调用StringBuffer的append()方法,最后调用StringBuffer的toString()方法把结果返回。

String s = "Hello";
s+="World";
等价于
StringBuffer sb = new StringBuffer(s);
s.append("World");
s = sb.toString();

StringBuilder也是可以被修改的字符串,与StringBuffer类似,都是字符串缓冲区,但不是线程安全的,适用于单线程;多线程访问时建议使用线程安全的StringBuffer;

执行效率方面,StringBuilder最高,StringBuffer次之,String最低;操作的数据量小,应当优先使用String类;单线程下操作大量数据,优先使用StringBuilder类;多线程下操作大量数据,优先使用StringBuffer类;

StringTokenizer是用来分割字符串的工具类;

1.4 Java中数组是不是对象

Java语言中不仅有其自己的属性,也可以有一些方法被调用,对象的特点是封装一些数据,同时提供了一些属性和方法;每个数组类型都有其对应的类型,可以通过instanceof来判断数据的类型;

1.5 数组的初始化方式有哪几种

一维数组的声明方式

type arrName[ ]或type[ ] arrayName

Java数组在定义时并不会给数组元素分配存储空间,必须为之分配空间

arrName = new Type[arraySize];//arraySize表示数组长度

初始化方法:

  1. int[ ] a = new int[5];//长度为5个整型值的数组,默认初始值为0;
  2. int[ ] a = {1,2,3,4,5};
  3. 二维数组的声明方法 type arrayName[ ][ ],type[ ][ ] arrayName;
    type arrayName[ ][ ] = new type[行数][列数]

1.6 length属性与length()方法有什么区别

  • 数组提供了length属性来获取数组的长度;
  • Java中,length()方法是针对于字符串而言的,String中提供了length()方法来计算字符串的长度;
  • size()方法是针对泛型集合的,用于查看泛型中有多少个元素;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值