运算符,枚举介绍与字符串

本文详细介绍了Java中的运算符使用技巧,包括赋值运算符、自增自减、关系运算与布尔运算、位运算、优先级和结合性,以及字符串操作、枚举和常用API。重点讲解了类型转换和运算符的不同形式,以及如何避免混淆和高效编程。
摘要由CSDN通过智能技术生成

运算符详解

结合赋值和运算符

  • 可以在赋值中使用二元运算符,这是一种很方便的简写形式.例如:x+=4;,等价于x=x+4;.(一般的要把运算符放在=号左边,如*=,%=)

如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换,例如:如果x是一个int,则以下语句x+=3.5;是合法的,将把x设置为(int)(x+3.5)

自增与自减运算符

  • 加一,减一是数值变量的最常见的操作.在Java中,借鉴了C++的做法,也提供了自增,自减运算符:n++将变量n的当前值加1,n–则将n的值减1,例如:
int n=12;
n++;

将n的值改为13,由于这些运算符会改变变量的值,所以他们的操作数不能是数值,例如:4++是不合法的.

  • 实际上,这些运算符有两种形式,一种是"后缀"形式n++,还有一种是"前缀"形式++n,"后缀"和"前缀"形式都会使变量值加一或减一,但用在表达式中时,二者就有区别,前缀形式会先完成加一,而后缀形式会使用变量原来的值.
int m = 7;
int n = 7;

int a = 2 * ++m;  // now a is 16,m is 8
int b = 2 * n++;  // now b is 14,n is 8

建议不要在表达式中使用++,因为这样代码很容易使人困惑.

关系式与boolean运算符

  • Java包含丰富的关系运算符,要检测相等性,可以使用两个等号==,例如:1==7,返回值为false.另外可以使用!=检测不相等,例如:3!=7,返回值为ture.
  • 最后,还有经常使用的<(小于),>(大于),<=(小于等于),>=(大于等于)运算符.
  • Java沿用了C++的做法,使用&&表示逻辑"与",使用||表示逻辑或,使用!表示逻辑非,&&||运算符是按照"短路"的方式来计算,如果第一个操作数已经能确定表达式的值,第二个操作数就不必计算了.例如:条件一 && 条件二.

如果条件一是false,那么结果不可能为true,因此第二个表达式不需要计算,可以利用这一点来避免错误.

  • 类似的,条件1 || 条件2,如果条件1正确,则整个表达式返回true.

位运算符

  • 处理整型类型时,可以直接对组成整型数值的各个位完成操作,这意味着可以用掩码技术得到整数中的各个位.位运算符包括:&(and),|(or),^(xor),~(not).
  • 这些运算符按照位模式处理,例如:如果n是一个整数变量,而且用二进制表示的n从右边数第4个1,则int fourBitFrom = (n & 0b1000) / 0b1000;.会返回1,否则会返回0.利用&并结合使用适当的2的幂,可以把其他位掩掉,而只报了其中的某一位.

应用在布尔值上,&和|运算符也会得到一个布尔值,这些运算符与&&和||运算符很类似,不过&和|运算符不采用"短路"方式求值.

  • 另外,还有>>和<<运算符将位模式左移或右移,需要建立位模式来完成位掩码时,这两个运算符会很方便使用.
  • 最后,>>>运算符会用0填充高位,这与>>不同,它会用符号位填充高位,不存在<<<符.

移位运算符的右操作数要完成模32的运算(除非左操作数是long类型,在这样的情况下需要对右操作数模64).例如:1<<35的值等同于1<<3,都为8.

括号与运算符级别

  • 运算的优先级(后面为结合性),由高到低排序
    1. [].()(方法调用):从左向右
    2. !,~,++,–,+,-,(),(强制类型转换),new:从右向左
    3. *,/,%:从左向右
    4. +,-:从左向右
    5. <<,>>,>>>:从左向右
    6. <,<=,>=,instanceof:从左向右
    7. ==,!=:从左向右
    8. &:从左向右
    9. ^:从左向右
    10. |:从左向右
    11. &&:从左向右
    12. ||:从左向右
    13. (?:):从右向左
    14. =,+=,*=,-=,/=,%=,&=,^=,<<=,>>=,>>>=:从右向左

枚举类型

  • 有时候,变量的取值只在一个有限的集合内,例如尺寸大小在S,M,L,X之间.针对这种情况,可以自定义枚举类型,枚举类型包括有限个命名的值,例如:enum Size { SMALL,MEDIUM,LARGE,EXTRA_LARGE};
  • 声明这种类型的变量:Size s =Size.MEDIUM;
  • Size类型的变量只能存储这个类型中给定的某个枚举值,或者null值,null表示这个变量没有设置任何值.

字符串

  • 从概念上讲,Java字符串就是Unicode字符序列,例如:串"Java"由4个Unicode字符J,a,v,a组成.Java中没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,为String类,每个用双引号括起来的字符串都是String类的一个实例.例如:
Stirng e = ""; //空串
Stirng greeting = "Hello";

子串

  • String类中使用substring方法可以从一个较大的字符串提取一个子串,例如:
String greeting = "Hello";
String s = greeting.substring(0,3); //"Hel"
  • substring第二个参数是不想复制的第一个位置,这里要复制0,1,2,在substring中从0开始计数,直到3为止,但不含3.

拼接

  • Java允许使用+号拼接两个字符串.
String explotive="Hello";
String PGL3=" World";
String str=explotive+PGL3; //Hello World
  • 当将一个字符串与一个非字符串的值进行拼接时,后者被转化为字符串.例如
int age=13;
String str = "age = " + age; //age = 13

不可变字符串

  • String类中没有提供用于修改字符串的方法,例如:String greeting = Hello,如果希望将greeting的内容修改为’Help!",不能直接将greeting的最后两个位置的字符修改为’p’和’!’,在Java中采用的方式是先提取再拼接的方式.
greeting = greeting.substring(0,3)+"p!"; //Help!
  • 由于不能修改Java字符串的字符,所以Java文档中将String类称为不可变字符串,如同数字3永远都是数字3,字符串"Hello"永远包含’H’,‘e’,‘l’,‘l’,'o’的代码单元序列.不能修改其中的任何一个字符.
  • 这样效率确实不高,但是有一个好处,就是编译器可以让字符串共享.
  • 工作方式:可以想象将各种各样的字符串存放到公共的存储池中,字符串变量指向存储池中响应的位置.如果复制一个字符串变量,原始字符串与复制的字符串共享的字符.

检测字符串是否相等

  • 可以使用equals方法检测两个字符串是否相等,对于表达式s.equals(t);,如果字符串s与t相等,则返回true,否则,返回false,注意:s与t可以是字符串变量,也可以是字符串字面量.例如:"Hello".equals(greeting);
  • 要想检测两个字符串是否相等,并且不区分大小写,可以使用equalsIgnoreCase方法."hello".equalsIgnoreCase("Hello");.
  • 一定不能使用==运算符检测两个字符串是否相等,这个运算符只能确定两个字符串是否放置在同一个位置上,当然,如果字符串放在同一个位置,它们必然是相等的.但是,完全有可能将内容相同的多个字符串的拷贝放置到不同位置.
String greeting = "Hello";
System.out.println(greeting=="Hello");// true
String greeting_sub=greeting.substring(0,3);
System.out.println(greeting_sub=="Hel");// false

空串和null串

  • 空串""是长度为0的字符串,可以调用以下代码检查一个字符串是否为空:if(str.length()==0)或者if(str.equals("")),空串是一个Java对象.有自己的串长度为0和内容空.不过,String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联.要检测一个字符串是否为null,使用如下代码:if(str==null),如果要检测一个字符串既不是空串也不是null串,即if( str != null && str.length() != 0 )

String常用的API

  1. char charAt(int index):返回给定位置的代码单元.
  2. int codePointAt(int index):返回从给定位置的码点.
    • 代码点(Code Point):在 Unicode 代码空间中的一个值,取值 0x0 至 0x10FFFF,代表一个字符.
    • 代码单元:在具体编码形式中的最小单位.
  3. int offsetByCodePoints(int startIndex , int cPCount):返回从startIndex代码点开始,位移CpCount后的码点索引.
  4. int compartTo(String other):按照字典顺序,如果字符串位于other之前,返回一个负数,如果位于other后,返回一个整数,如果相等,返回0.
  5. IntStream codePoints():将这个字符串的码点作为一个流返回,调用toArray将他们放在一个数组中.
  6. boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时才返回true.
  7. byte[] getBytes():使用平台的默认字符集将此String编码为字节序列,将结果存储到新的字节数组中.
  8. byte[] getBytes(String charsetName):使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中.
  9. int indexOf(int ch):返回指定字符第一次出现的字符串内的索引.
  10. boolean isEmpty():当且仅当length()为0,返回true
  11. char[] toCharArray():将此字符串转换为新的字符数组.
  12. String toLowerCase():将所有字符转化为小写.
  13. String toUpperCase():将所有字符转化为大写.
  14. String valueOf(boolean b):返回boolean参数的字符串boolean形式.
  15. String valueOf(char c):返回char参数的字符串.
  16. String valueOf(char[] data,int offset,int count):返回char[]参数的字符串.
  17. String valueOf(double d):返回double参数的字符串.
  18. String valueOf(float f):返回float参数的字符串.
  19. String valueOf(int i):返回int参数的字符串.
  20. String valueOf(long l):返回long参数的字符串.
  21. String valueOf(Objet o):返回Object参数的字符串.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值