" + r1 + "\n-----【(st1+st2).equals(st3)】" + r2 + "\n-----【st3.equals(st4)】" + r3); } }
结果:
-----【t1==t2】false -----【(t1+t2)=t3】true -----【t3=t4】true
-----【i1.equals(i2)】false -----【i3.equals(i1+i2)】true -----【i3.equals(i4)】true
-----【st1==st2】false -----【(st1+st2)==st3】false -----【st3==st4】true
-----【st1.equals(st2)】false -----【(st1+st2).equals(st3)】true -----【st3.equals(st4)】true
总之: “==”比较的是值【变量 栈)内存中存放的对象的 堆)内存地址】 比较的是值【 内存中存放的对象的 内存地址】 比较的是值 变量(栈 内存中存放的对象的(堆 内存地址 equal 用于比较两个对象的值是否相同【不是比地址】 用于比较两个对象的值是否相同【不是比地址】
基本数据类型
与 C/C++不同, 中没有无符号整型数, Java 而且明确规定了各种整型数据所占的内存字节书, 这就保证了平台无关性。 byte (1 字节)—〉short (2 字节)—〉int (4 字节)—〉long(8 字节)—〉float (4 字节)—〉double(8 字节) char(2 字节)—〉int (4 字节)—〉long(8 字节)—〉float (4 字 节)—〉double(8 字节) 强制类型转换,除了用在缩减转换中,也可以用在扩展转换中,一是为了让程序阅读时更为 清晰,二是为了让编译器产生更为优化的代码,加快运算的速度。
publicclass Test { publicstaticvoid main(String args[]) { floatfmin = -1f / 0f; // 求最小的单精度数 float fmax = 1f / 0f; // 求最大的单精度数
// //
float fmin=Float.NEGATIVE_INFINITY; float fmax=Float.POSITIVE_INFINITY; System.out.println("float:"+(float)fmin+".."+(float)fmax); System.out.println("long: " + (long) fmin + ".." + (long) fmax); System.out.println("int: " + (int) fmin + ".." + (int) fmax); System.out.println("short: " + (short) fmin + ".." + (short
) fmax); System.out.println("char: " + (int) (char) fmin + ".."+ (int)
(char) fmax); System.out.println("byte: " + (byte) fmin + ".." + (byte) fmax); } } float:-Infinity..Infinity long: -9223372036854775808..9223372036854775807 int: -2147483648..2147483647 short: 0..-1 char: 0..65535 byte: 0..-1
包装类、自动装箱、 包装类、自动装箱、自动拆箱
面向对象的
Java 提供了 8 种基本数据类型是为了照顾程序员传统的习惯。为了解决 8 个基 本数据类型的变量不能当成 Object 类型变量使用的
问题,Java 提供了包装类的概念。 除了 char 和 int 的包装类分别是 Integer 和 Character 之外,其他基本类型的包装类都是将其 首字母大写。
publicclass Test { publicstaticvoid main(String[] args) { Integer inObj=5; Boolean boolObj=true; Float floatObj=1.23f; //将基本数据类型包装成包装类 booleanbb=boolObj.booleanValue(); inti=inObj.intValue(); floatf=floatObj.floatValue(); //从包装类中取出基本数据类型 } }
自动装箱:将一个基本类型变量直接赋给对应的包装类变量,或者 Object 变量。 自动拆箱:直接把包装类对象直接赋给一个对应的基本类型变量。
包装类还可实现基本类型变量和字符串之间的转换。
静态 Static
允许不创建对象而调用静态方法,是 Java 为了减少
程序员调用某些
常用方法时的麻烦,而 允许程序员按照传统 c 语言中使用函数的方式使用方法。例如:Math.ramdon()。 静态方法中只允许访问静态变量和静态方法。 实例方法可以访问静态和实例成员。 静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面。 静态代码块里的变量都是局部变量,只在本块内有效。 静态代码块会在类加载时自动执行,无论加载者是 JVM 还是其它的类。 一个类中允许定义多个代码块,执行的顺序按定