不是,String是引用类型,底层是用char数组实现的。 Java 中的基本数据类型只有8 个:
byte
、short
、int
、long
、float
、double
、char
、boolean
;除了基本类型(primitive type),剩下的都是引用类型(referencetype), Java 5 以后引入的枚举类型也算是一种比较特殊的引用类型。
int
类型,而s是short
类型,通过+运算后s1自动转换成int
型。错误提示:Error:(21, 17) java: 不兼容的类型: 从int
转换到short
可能会有损失int
类型的操作,s1自动转换int
类型 Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是Integer,从Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
public class AutomaticUnboxing {
public static void main(String[] args) {
Integer a1 = 100,a2 = 100,z3 = 139, z4 =139;
System.out.println(a1 == a2); //true
System.out.println(z3 == z4); //false
}
}
如果整型字面量的值在-128 到127 之间,那么不会new 新的Integer对象,而是直接引用常量池中的Integer 对象
不正确。3.4是双精度。将双精度型(double) 赋值给浮点型(float)属于下转型( down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换
float f =(float)3.4
; 或者写成float f =3.4F
;。
移位运算符:
int i = 2 << 3
;
方法 | 描述 |
---|---|
int length() | 返回此字符串的长度 |
int indexOf(int ch) | 返回指定字符在此字符串中第一次出现处的索引 |
int indexOf(int ch, int fromIndex) | 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索 |
int lastIndexOf(int ch) | 返回指定字符在此字符串中最后一次出现处的索引 |
String concat(String str) | 将指定字符串连接到此字符串的结尾。 |
boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束。 |
String replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
String[] split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
String substring(int beginIndex) | 返回一个新的字符串,它是此字符串的一个子字符串 |
String trim() | 返回字符串的副本,忽略前导空白和尾部空白 |
boolean equals(Object anObject) | 将此字符串与指定的对象比较。 |
1、可变与不可变
String:字符串常量,在修改时不改变自身;若修改,等于生成新的字符串对象
StringBuffer:在修改时会改变对象自身,每次操作都是对 StringBuffer 对象本身进行修改,不是生成新的对象;使用场景:对字符串经常改变情况下,主要方法: append insert ()等。
2、线程是否安全
String:对象定义后不可变,线程安全。
StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区大量数据。
StringBuilder :是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。
3、共同点
StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence
StringBuilder、StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方法,如 super.append(...)。只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用StringBuilder 效率高于StringBuffer。
对于三者使用的总结
while是先判断再执行;do...while是先执行再判断,同等条件下,后者多执行了一次。
byte、int、short、char
以及它们的封装类上long、double、float、boolean
以及封装类String s =new String("xyz");
,创建了几个String 对象?二者之间再什么区别。创建了2个对象,一个是内存中的“xyz”,还有一个是s,指向xyz
自动装箱:将基本类型用他们的引用类型包装起来 自动拆箱:将包装类型转换为基本类型
Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加 0.5 然后进行下取整。
int count = 0;
for (int k = 0; k < 100; k++) {
count = count++;
}
System.out.println(count);
解析:++是先赋值,再自增,所以count永远是0
基本类型等级从低到高:
自动转换:运算过程中,低级可以自动向高级进行转换 强制转换:高级需要强制转换成低级,可能会丢失精度 规则: