当前位置:   article > 正文

Java中String对+的重载_java string类的运算算运算符重载吗

java string类的运算算运算符重载吗

重载:

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

重载的作用:

一般情况下,方法的命名要遵守一定的规则,保证程序的可读性,那么,很可能在一个类中需要不同的方法但是方法名需要相同,参数不同,比如最常用的登录(Login),这时会用到重载,这样,既可以表示方法的意义,又表示这些方法是相关方法,方便调用。另外,重载对于编写结构清晰而简洁的类有很大的作用。

String对+的重载

java中实际没有运算符的重载,但是对String对象而言,它是可以直接+将两个String对象的字符串值相加。乍看起来这是对+的重载,但我们可以通过class文件看出,这只是JVM做的语法糖。

举例说明:

  1. public class TestString {
  2. public static void main (String[] args){
  3. String str1 = "I like";
  4. String str2 = " animal";
  5. String str3 = str1 + str2;
  6. System.out.println("str3:" + str3);
  7. }
  8. }

输出结果:

str3:I like animal

看了反编译之后的代码我们发现,其实String对+的支持其实就是使用了StringBuilder以及他的appendtoString两个方法。

反编译内容如下:

  1. public class com.rrx.finance.fund.common.TestString {
  2. public com.rrx.finance.fund.common.TestString();
  3. Code:
  4. 0: aload_0
  5. 1: invokespecial #1 // Method java/lang/Object."<init>":
  6. ()V
  7. 4: return
  8. public static void main(java.lang.String[]);
  9. Code:
  10. 0: ldc #2 // String I like
  11. 2: astore_1
  12. 3: ldc #3 // String animal
  13. 5: astore_2
  14. 6: new #4 // class java/lang/StringBuilder
  15. 9: dup
  16. 10: invokespecial #5 // Method java/lang/StringBuilder."<
  17. init>":()V
  18. 13: aload_1
  19. 14: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
  20. 17: aload_2
  21. 18: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
  22. 21: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
  23. 24: astore_3
  24. 25: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
  25. 28: new #4 // class java/lang/StringBuilder
  26. 31: dup
  27. 32: invokespecial #5 // Method java/lang/StringBuilder."<init>":()V
  28. 35: ldc #9 // String str3:
  29. 37: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
  30. 40: aload_3
  31. 41: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
  32. 44: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
  33. 47: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
  34. 50: return
  35. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/468071
推荐阅读
相关标签
  

闽ICP备14008679号