| Object类位于java.lang包中,java.lang包包含着Java最基础和核⼼的类,在编译时会⾃动导⼊ |
| Object类是所有Java类的祖先,每个类都使⽤ Object 作为超类 |
| |
| # 常用方法 |
| public final native Class<?> getClass() |
| 获取对象的运⾏时class对象,class对象就是描述对象所属类的对象, 类的对象可以获取这个类的基本信息,如名、包、字段、⽅法等(⽤于反射会⽐较多,以后有机会再了解) |
| public native int hashCode() |
| 获取对象的散列值,集合框架中应⽤,⽐如HashMap |
| public boolean equals(Object obj) |
| ⽐较两个对象,如果这两个对象引⽤指向的是同⼀个对象,那么返回true,否则返回false集合框架中有讲 |
| public String toString() |
| ⽤于返回⼀个可代表对象的字符串,看源码可以得知,默认返回格式如下:对象的class名称 + @ + hashCode的⼗六进制字符串,所以前⾯课程写对象时候,需要重写这个⽅法,⽅便调试 |
| Java操作数学运算相关的类 |
| 构造函数被私有化,所以不允许创建对象 |
| 都是静态⽅法,使⽤是直接类名.⽅法名 |
| |
| # 常用api |
| |
| System.out.println(Math.sqrt(16)); |
| |
| |
| System.out.println(Math.cbrt(8)); |
| |
| |
| System.out.println(Math.max(2.9,4.5)); |
| System.out.println(Math.min(2.9,4.5)); |
| |
| |
| System.out.println(Math.ceil(19.7)); |
| System.out.println(Math.ceil(-20.1)); |
| |
| |
| System.out.println(Math.floor(19.7)); |
| System.out.println(Math.floor(-20.1)); |
| |
| |
| System.out.println(Math.random()); |
| |
| |
| int random=(int)(Math.random()*10+1); |
| 字符串是对象,不是简单数据类型 |
| 封装在java.lang包,⾃动导⼊ |
| |
| # 字符串比较 |
| == 是⽐较地址 |
| 内容是否相等需要⽤ equals()⽅法⽐较 |
| |
| # 常用api |
| String str = "adsfasdfas" |
| |
| str.length(); |
| |
| |
| char char = str.charAt(5); |
| |
| |
| boolean result = str1.equals(str2); |
| |
| |
| boolean result = str1.equals(str2); |
| |
| |
| int index = str.indexOf("."); |
| |
| |
| String result1 = str.substring(index); |
| String result2 = str.substring(index1, index2); |
| |
| |
| String [] arr = str.split("\\."); |
| |
| |
| str.replace("x","a"); |
| |
| |
| str.toUpperCase(); |
| str.toLowerCase(); |
| |
| |
| str1.trim(); |
| |
| # 类型转换 |
| boolean bool = Boolean.getBoolean("false"); |
| int integer = Integer.parseInt("20"); |
| long LongInt = Long.parseLong("1024"); |
| float f = Float.parseFloat("1.521"); |
| double d = Double.parseDouble("1.52123"); |
StringBuilder 和 StringBuffer
| StringBuilder 是一个可变的字符序列。它继承于AbstractStringBuilder,实现了CharSequence接口 |
| StringBuffer 也是继承于AbstractStringBuilder的子类 |
| StringBuilder和StringBuffer不同,前者是非线程安全的,后者是线程安全的 |
| private static void testInsertAPIs(){ |
| StringBuilder sbuilder = new StringBuilder(); |
| |
| sbuilder.insert(0, new char[]{'a', 'b', 'c', 'd', 'e'}); |
| |
| sbuilder.insert(0, new char[]{'A', 'B', 'C', 'D', 'E'}, 0, 3); |
| |
| sbuilder.insert(0, 1.414f); |
| |
| sbuilder.insert(0, 3.14159d); |
| |
| sbuilder.insert(0, true); |
| |
| sbuilder.insert(0, '\n'); |
| |
| sbuilder.insert(0, 100); |
| |
| sbuilder.insert(0, 12345L); |
| |
| sbuilder.insert(0, new StringBuilder("StringBuilder")); |
| |
| sbuilder.insert(0, new StringBuilder("STRINGBUILDER"), 6, 13); |
| |
| sbuilder.insert(0, new StringBuffer("StringBuffer")); |
| |
| sbuilder.insert(0, new StringBuffer("STRINGBUFFER"), 6, 12); |
| |
| sbuilder.insert(0, "String"); |
| |
| sbuilder.insert(0, "0123456789", 1, 6); |
| sbuilder.insert(0, '\n'); |
| |
| HashMap map = new HashMap(); |
| map.put("1", "one"); |
| map.put("2", "two"); |
| map.put("3", "three"); |
| sbuilder.insert(0, map); |
| System.out.printf("%s\n\n", sbuilder); |
| } |
| |
| private static void testAppendAPIs() { |
| StringBuilder sbuilder = new StringBuilder(); |
| |
| sbuilder.append(new char[]{'a','b','c','d','e'}); |
| |
| sbuilder.append(new char[]{'A','B','C','D','E'}, 0, 3); |
| |
| sbuilder.append(1.414f); |
| |
| sbuilder.append(3.14159d); |
| |
| sbuilder.append(true); |
| |
| sbuilder.append('\n'); |
| |
| sbuilder.append(100); |
| |
| sbuilder.append(12345L); |
| |
| sbuilder.append(new StringBuilder("StringBuilder")); |
| |
| sbuilder.append(new StringBuilder("STRINGBUILDER"), 6, 13); |
| |
| sbuilder.append(new StringBuffer("StringBuffer")); |
| |
| sbuilder.append(new StringBuffer("STRINGBUFFER"), 6, 12); |
| |
| sbuilder.append("String"); |
| |
| sbuilder.append("0123456789", 1, 6); |
| sbuilder.append('\n'); |
| |
| HashMap map = new HashMap(); |
| map.put("1", "one"); |
| map.put("2", "two"); |
| map.put("3", "three"); |
| sbuilder.append(map); |
| sbuilder.append('\n'); |
| |
| sbuilder.appendCodePoint(0x5b57); |
| sbuilder.appendCodePoint(0x7b26); |
| sbuilder.appendCodePoint(0x7f16); |
| sbuilder.appendCodePoint(0x7801); |
| System.out.printf("%s\n\n", sbuilder); |
| } |
| |
| private static void testReplaceAPIs() { |
| StringBuilder sbuilder; |
| sbuilder = new StringBuilder("0123456789"); |
| sbuilder.replace(0, 3, "ABCDE"); |
| System.out.printf("sbuilder=%s\n", sbuilder); |
| sbuilder = new StringBuilder("0123456789"); |
| sbuilder.reverse(); |
| System.out.printf("sbuilder=%s\n", sbuilder); |
| sbuilder = new StringBuilder("0123456789"); |
| sbuilder.setCharAt(0, 'M'); |
| System.out.printf("sbuilder=%s\n", sbuilder); |
| System.out.println(); |
| } |
| |
| private static void testDeleteAPIs() { |
| StringBuilder sbuilder = new StringBuilder("0123456789"); |
| |
| sbuilder.deleteCharAt(0); |
| |
| sbuilder.delete(3,6); |
| |
| String str1 = sbuilder.substring(1); |
| |
| String str2 = sbuilder.substring(3, 5); |
| |
| String str3 = (String)sbuilder.subSequence(3, 5); |
| System.out.printf("sbuilder=%s\nstr1=%s\nstr2=%s\nstr3=%s\n", |
| sbuilder, str1, str2, str3); |
| } |
| |
| private static void testIndexAPIs() { |
| StringBuilder sbuilder = new StringBuilder("abcAbcABCabCaBcAbCaBCabc"); |
| System.out.printf("sbuilder=%s\n", sbuilder); |
| |
| System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\")", |
| sbuilder.indexOf("bc")); |
| |
| System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\", 5)", |
| sbuilder.indexOf("bc", 5)); |
| |
| System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\")", |
| sbuilder.lastIndexOf("bc")); |
| |
| System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\", 4)", |
| sbuilder.lastIndexOf("bc", 4)); |
| System.out.println(); |
| } |
| |
| private static void testOtherAPIs() { |
| StringBuilder sbuilder = new StringBuilder("0123456789"); |
| int cap = sbuilder.capacity(); |
| System.out.printf("cap=%d\n", cap); |
| |
| |
| |
| |
| |
| |
| |
| char c = sbuilder.charAt(6); |
| System.out.printf("c=%c\n", c); |
| char[] carr = new char[4]; |
| sbuilder.getChars(3, 7, carr, 0); |
| for (int i=0; i<carr.length; i++){ |
| System.out.printf("carr[%d]=%c ", i, carr[i]); |
| } |
| System.out.println(); |
| } |
- 执行速度比较:StringBuilder > StringBuffer > String
| # String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中 |
| 无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的 |
| # 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下 |
| 位于java.lang包中,它是系统类,代表程序所在系统,提供了对应的⼀些系统属性信息和系统操作 |
| final类型,构造函数被私有化 |
| |
| # 常用api |
| |
| System.out |
| System.in |
| System.err |
| |
| |
| System.currentTimeMillis() |
| |
| |
| System.getProperties() |
| |
| |
| System.getProperties(key) |
| # Java是⼀个⾯相对象的编程语⾔,但基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型 |
| # 集合框架⾥⾯需要存储对象,不能存储基本数据类型,所以需要存储包装类型 |
| |
| 基本类型 包装器类型 |
| boolean Boolean |
| char Character |
| int Integer |
| byte Byte |
| short Short |
| long Long |
| float Float |
| double Double |
| |
| # 类型转换 |
| int i1 = 0; |
| Integer integer1 = new Integer(i); // int转为Integer |
| Integer integer2 = new Integer(0); |
| int i2 = integer2.intValue(); // Integer转为int |
| |
| Boolean booleanObj1 = new Boolean(false); |
| boolean baseBool1 = booleanObj.booleanValue(); // Boolean转为boolean |
| |
| boolean baseBool2 = false; |
| Boolean booleanObj2 = new Boolean(baseBool2); // boolean转为Boolean |
| 基本数据类型不⽤new, 包装类型需要使⽤new关键字来在堆中分配存储空间 |
| 存储⽅式及位置不同,基本类型是直接将变量值存储在栈中,包装类型是将对象放在堆中,然后通过引⽤来使⽤ |
| 初始值不同,基本类型的初始值如int为0,boolean为false,包装类型的初始值为null |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术