4.Java基础-运算符

文章目录

一些注意点

  1. 当参与 / 运算的两个操作数都是整数时, 表示整数除法;否则, 表示浮点除法。

  2. 数值类型之间的精度转换(实线表示没有精度缺失,虚线表示精度缺失)

image-20220101121814436
  1. 普通强制转换可以使用 (转换后类型)原变量 的方式,对于浮点数进行四舍五入计算时,可以使用Math.round(x);
  2. && 和||运算符是按照“ 短路” 方 式来求值的: 如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。{使用&和|则需要都计算}

例如 A&&B,若A为假,则无需计算B

A||B,若A为真,则无需计算B.

  1. 字符串提取子串,使用substring(start,end),截取start~end-1

字符串拼接,使用join(A,B,C)或者"+"

  1. Java中字符串不可修改,String类称为不可变字符串.即字符串String temp=“world”,"world"是一个整体,不可修改,但可以将temp引向新的字符串.例如 temp=“china”;

注:C,C++中可以修改字符串的某个字符

Java中修改方法之一(本质是将temp引向新的拼接的字符串)

String temp=“hello”;

temp=temp.substring(0,3)+“abc” //得到"helabc";

  1. 不可变字符串的一个大优点: 编译器可以让字符串共享

理解为:Java维护一个公共的字符串常量存储池,字符串变量指向存储池中对应位置,当想要复制一个变量时,只需要将新的变量指向对应位置即可,提高效率,空间利用率

  1. Java中检查字符串是否相等 s.equals(t),s和t可以是变量或者字面量(“hello”); 不区分大小写时,可以使用equalsIsIgnoreCase(),验证码可以使用;

  2. 不可以使用’=='检查字符串相等,比较的是变量地址位置是否相等, Java对应字符串常量共享,对于substirng或"+"等产生的结果不共享 ,所有使用= =会产生错误

  3. 空串是长度为0的字符串,可以调用 strength()==0或者str.equals("")判断,String 可以存放一个null,表示目前变量与任何对象无关. str= =null可以判断

  4. 当即要检查字符串是否为null也要检查字符串是否为空串可以使用str!=null&&str.length()!=0判断,顺序不可颠倒,因为str如果为空,那么调用str.length()会报异常.

注:根据&&"短路方式"规则,如果str为空,那么不执行后面的str.length()

  1. 码点和代码单元
  • 已知char数据类型是一个采用UTF-16编码表示的Unicode码点的代码单元.
  • 已知大部分普通Unicode字符使用一个代码单元.辅助字符需要两个代码单元

length方法返回采用UTF-16编码表示的给定字符串所需要的代码单元数量

charAt()方法也是返回指定的代码单元(从0开始) 如果输出中遇到辅助字符,会产生错误.

==码点:==对存在辅助字符的字符串,使用码点表示每一个字面量符号,对于存在辅助字符的字符串返回码点不会出现代码单元的错误

例如(暂时没找到辅助字符,引用下书中的):

⑪ is the set of octonions 使用 UTF-16 编码表示字符⑪(U+1D546) 需要两个代码单元。

调用 char ch = sentence.charAt(1) 返回的不是一个空格,而是⑪的第二个代码单元,此时可以使用sentence.codePointAt(0),

  1. 如果想要同时对多个码点进行操作,使用codePointAt(int i)不方便,可以使用str.codePoints(),方法返回一个int值的流,每个int值对应一个码点,可以转换为一个数组.

例如:

int []codePoints=str.codePoints().toArray();//字符串转int

String str=new String(codePoints,0,codePoints.length)//码点数组转换为一个字符串
  1. Java中常见StringAPI
	char charAt(int index)//返回指定位置代码单元,不推荐使用
    
	int codePointAt(int index)//5.0之后使用,返回给定位置的码点

	int offetByCodePoints(int start,int count)//5.0后使用,返回从start后的,位移为count的码点索引
    int compareTo(String other)//按照字典顺序比较,如果字符串在other前,返回一个负数,反之,返回正数,相等返回0 
    IntStream codePoints() //8.0后使用,将字符串的码点返回一个int流,可以接着调用.toArray()生成一个数组
    new String(int []codePoints,int offset,int count)//5.0 用数组从offset开始的count个码点构造一个字符串
    
    boolean equals(Object other)//判断字符串和other内容是否相等.==不可用于判断内容相等,
    //原因: ==判断的是变量的地址,而对于substring()等得到的字符串和字符常量地址不同,
	//例如:
 	String other="hello";
 	System.out.println(other.substring(0,3)=="hel");//结果为false;
	
	boolean equalsIgnoreCase(String other)//忽略大小写判断内容
   	boolean startsWith(String prefix)
    boolean endsWith(String suffix) //判断字符串是否是prefix为开头,或者suffix为结尾;
   
    int indexOf(String str) 
    int indexOf(String str,int fromIndex)
   	int indexOf(int cp)
    int indexOf(int cp,int fromIndex)    
    //返回str或者cp码点匹配的第一个子串的开始位置,从索引0或者fromIndex开始计算,如果没有返回-1;
    "hello".indexOf("ll")//结果为2
    "hello".indexOf("ll",1)//结果为2
    "hello".indexOf("ll",3)//结果-1,从3索引位置后没有"ll"   
     int lastIndexOf(String str)
     int lastIndexOf(String str,int fromInex)
     int lastIndexOf(int cp)
     int lastIndexOf(int cp,int fromIndex)
        //返回字符串str或代码点cp匹配的最后一个子串的开始位置,这个位置从开始串或者从fromIndex开始,

     String toLowerCase()//转小写
     String toUpperCase()//转大写
     String trim()//删除头尾空格
        
     String join(CharSequence delimiter,CharSequence... elements)//8,返回一个新字符串,使用给定的定界符连接所有的元素 字符串属于CharSequence接口
      //例如:
     String str = "abc";
     String temp="hello";
     System.out.println(String.join("@",str,temp));
	//结果:abc@hello

  1. 构建字符串,使用字符串连接的方式效率比较低,可以使用StringBuilder类构建

例如:

 		StringBuilder builder=new StringBuilder();
        builder.append("a");
        builder.append("hello");
        System.out.println(builder.toString());

  1. 对于StringBuilder,5.0后引入,前身为StringBuffer,如果在单线程中编辑那么使用StringBuilder,如果在多线程中使用StringBuffer(效率较低但是允许多线程)

StringBuilder常用API

int length();//返回长度
 StringBuilder append(String str);
 StringBuilder append(char c);
 StringBuilder appendCodePoint(int cp); //追加一个String,Char,或者codePoint到字符串

void setCharAt(int i,char c); //设置第i个代码单元

 StringBuilder insert(int offset,String str);
 StringBuilder insert(int offset,Char c);//在offset插入Char或者String

 StringBuilder delete(int startIndex,int endIndex);
//删除startIndex~endIndex-1
String toString() //转为字符串
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

renzhiguo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值