位运算
处理整型类型时,可直接对整型数值各个为操作。
左移 | 右移 |
---|---|
<< | >> |
各个位数值向左移,空缺补0 | 各个位向右移,空缺补符号位(首位为符号位) |
注:>>>运算符用0填充高位,不存在<<<运算符。
(21~~213: 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192)
例如:2457*1234
把1234拆分成 1024+128+64+16+2
原式变为
2457 * 1024+2457 * 128+2457 * 64+2457 * 16+2457 * 2,
即把2457左移各个位然后相加。
运算符优先级
(按顺序优先级依次降低)
运算符 | 结合性 |
---|---|
[ ].( )(方法调用) | 从左向右 |
! ~++ - - +(一元运算)- (一元运算) ( )(强制类型转换)new | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< <= > >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?: | 从右向左 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右向 |
字符串
Java 字符串就是 Unicode 字符序列。
标准 Java 类库中提供了一个预定义类,为 String。" " 括起来的为字符串。
如:
String i =" "; // an empty string
String greeting = “Hollow”;
1、子串
String 类的 substring 可从一个较大的字符串提取出一个子串。
String greeting = “Hollow”;
String s = greeting.substring(0,3);
即创建了一个“Hol”的字符串。(substring从0开始计数,到3截至,但不包括3)
2、 拼接
java语言可用+号连接两个字符串,当一个字符串与一个非字符串的值拼接时,后者被转换成字符串。
3、不可变字符串
栈:涉及控制指令顺序方法的基本类型放到栈中。先入后出原则。
堆:类的基本类型放在堆中。
1) string b = “a”;(等号之前的放在栈中,等号之后的数值放在堆中)
2) string x =“a”;
string x =“asada”;
上面的字符串变为下面的,需要再占用一个新的地址,并且舍去原来的地址,不可在原地址上更改,原地址不可变,即长度和存于其中的字符串都不可变。
3)a = c 改变a的地址
a.name = c 改变 name 的地址
无论怎样,只改变 = 前面内容的地址。
4、检测字符串是否相等
1) s.equals(t)
如果字符串 s 与字符串 t 相等,则返回 true ;不等,返回 false 。并且返回值的类型为 boolean 类型。
只有字符串的 equals 比较值,其他的比较地址。
2) string s3 = new String(“qwe”);
String s6 = s3;
String s7 = s6;
s6 = new String ( );
system.out.println(s3==s7);
(部分程序)
最后比较 s3 和 s7 的地址是否相等 因为 s6 又重新占用了一个新的无内容地址,而其所在原地址不可变,所以s7所在即为s6的原地址,与s3地址相同。
3) 如图
we = new TestOb( ); 存在时:
we = new TestOb( ); 不存在时:
(new string 即在堆中找一块新空间放入)
在 Java 里面参数传递都是按值传递,按值传递传递的引用的地址值的拷贝,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 是永远不会改变的。