String

String常用操作API
  
JDK1.8常量池是放在堆里面
public void test1() {
    // " abc "双引号括起来的字符串:常量字符串,他也是一个对象
    // 1.8之后常量池放到堆,在常量池里面找有没有这个" abc "对象,
    // 如果常量池里面没有这个字符串对象,java就帮你在常量池里面new一个" abc "字符串对象。
    // 如果常量池里面有这个字符串,就把这个字符串的地址赋给这个变量。
   String str1 = "abc";
   String str2 = new String( "abc");
   String str3 = "abc";
    // ==比较的是变量指向的对象的地址值
   System. out.println( str1 == str2); // false
   System. out.println( str1 == str3); // true
   System. out.println( str2 == str3); // false
   
    // 比较字符串的内容是不是相等使用equals()
    // 表str1这个字符串和str2这个字符串的内容是不是相等
   System. out.println( str1.equals( str2)); // true
   System. out.println( str1.equals( str3)); // true
   System. out.println( str2.equals( str3)); // true
}
@Test
public void test5() {
String str = "java AndroidA";
String newStr = str.replace('A','B');
System.out.println(str);//java AndroidA 进行操作了 但保留了原来的
System.out.println(newStr);//java BndroidB
}
@Test
public void test6() {
String str = "java AndroidA";
String[] array = str.split("a");//按照a切割
//foreach 快捷键 array.iter
for (String s : array) {
System.out.println(s);//j v AndroidA
}
}
@Test
public void test7() {
String str = "java AndroidA";
System.out.println(str.substring(5));//Android 从下标为5开始 截到最后A
System.out.println(str.substring(5, 10));//Andro [5,10) 下标为10的取不到
}
@Test
public void test8() {
String str = " zhangsan ";
System.out.println(str);
System.out.println(str.trim());//zhangsan 忽略前导空白和尾部空白
}

String、StringBuffer、StringBuilder
int num = 10;
String str = "hello";
num是基本数据类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。
num = 20;
str = "java";
对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。
如上图所示,"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)
public void test9() {
// Required type:StringBuffer
// Provided:String
// StringBuffer stringBuffer = "abc";
String str1 = "abc";
String str2 = "def";
String str3 = "ghi";
String str4 = "jkl";
str1 = str1 + str2 + str3 + str4;
//new 一个新的字符串赋给str1 每两个相加就new一个新的字符串
System.out.println(str1);
StringBuffer stringBuffer = new StringBuffer("abc");
//stringBuffer.append(str2);
//stringBuffer.append(str3);
stringBuffer.append(str2).append(str3).append(str4);//链式编程
//调用完append(str2)方法 就返回一个stringBuffer.append(str2)对象
System . out .println( stringBuffer );
String、 StringBuffer、StringBuilder异同点:
相同点:都是final类,都不能被继承。
不同点:
1、String长度是不可改变的,StringBuffer、StringBuilder长度是可变的。
2、StringBuffer是线程安全(synchronize:同步) (需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)
如果对这段代码加锁,就可以实现每次只有一个用户能进入这段代码,当执行完了之后,释放这个锁,另一个用户才能进来。
if (money>1000) {
     money = money - 1000;
}
常量字符串的拼接,编译器会做优化,使用String就可以:
String str = "Java" + "PHP" + "Python" + "C";

包装数据类型: 
Java是纯面向对象语言,int、double都是基本数据类型。  
int                     Integer
char                  Character
double              Double
long                  Long 
short                 Short
boolean            Boolean   
byte                  Byte
String 不是包装类  是 引用类型, 所谓包装类是针对java中的原生数据类型(基本数据类型)而存在的。 String是一个固定长度的字符串,对String进行操作,是创建新的对象(String的操作都是改变赋值地址而不是改变值操作)。
而和它相似的还有一个字符串StringBuffer,对StringBuffer进行操作,这是在原来的对象之上进行改变(StringBuffer的操作都是改变值操作)。
String是一种不高效的字符串使用方式,在要求执行效率的系统当中会更多的使用StringBuffer来代替,这样可以降低系统的繁复性。
除了基本数据类型之外的都是引用数据类型( 所谓的引用类型是指:数据的引用在栈中,而他的对象在堆中。),用一个类来描述。
所有引用数据类型的默认值是null。
//实体类中的属性中基本数据类型都有默认值,这个默认值很有可能是他的 有效数据之一 可以用包装类型
虽然基本数据类型和包装数据类型互相转换有装箱和拆箱的过程,但是我们平时使用的时候
把包装数据类型当成基本数据类型来使用就可以
public void test10() {
Integer integer1 = 12;//实际上这样是不对的 但是他自动做了装箱拆箱处理
//装箱
Integer integer2 = new Integer(12);
//拆箱
//int i = integer1.intValue();//你封装的是哪个整数 把他拿出来给int
}
包装数据类型最主要使用: 包装数据类型和字符串之间的转换
1、把基本数据类型转换成字符串
     (1) 基本数据类型+"" :   String str = 12 + ""; // "12"
     (2) 基本数据类型的包装类.toString()
         String str1 = Integer.toString(3);
         String str2 = Double.toString(3.14);
2、把字符串转换成基本数据类型(从网页的输入框中得到的都是字符串)
    (1) Integer.parseInt(String str);  // "23"  "3.14"
         Double.parseDouble(String str);  
         Boolean.parseBoolean(String str);
          XXXX.parseXXXX(String str);
    (2) new对象: Integer integer = new Integer(String str);
          Integer interger = new Integer("4");
          int i = integer.intValue();
3.将数组转换成字符串
(1)  new String(array
(2) String.valueOf(array)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值