键盘手C 2016-05-03 14:35 采纳率: 60%
浏览 1384
已采纳

java中的反射的变量定义问题

新人初学,还望各位能多多帮助
我在学习反射的过程中,遇到这样一个问题
String s1 = new String (new StringBuffer("abc"));
这条语句我看了下JDK文档,发现String的构造函数中有一个构造方法的参数是StringBuffer的对象,然后又看了看StringBuffer的定义,发现这条语句等于
String s1 = "abc";
为什么要这样写呢,
还有
Constructor cs1 = String.class.getConstructor(StringBuffer.class);
这条语句完全看不懂,书上说Class(大写)中存在一个getConstructor这个方法,我也查了下,确实是有的,但是又说了,所以通过String.class(小写)获取关于String类的字节码,我看了下getConstructor的返回值,是一个构造函数,但是具体这条语句是怎么实现的,我还是不懂,求教各位,为什么这个class一会大写,一会小写,‘
初学,求助,谢谢

  • 写回答

2条回答 默认 最新

  • trium_KW 2016-05-03 15:02
    关注

    第一个问题:


    为什么用StringBuffer我不太清楚,不过使用String的构造器和直接用字符串常量倒是有一个不同。看以下例程:

      String s1 = new String("hello");
      String s2 = new String("hello");
      System.out.println(s2 == s2); //此处输出false,因为由构造器返回的字符串不会被intern()
      String s3 = "hello";
      String s4 = "hello";
      System.out.println(s3 == s4); //此处输出true
    


    第二个问题:


    大写的Class是表示某类中运行时信息的类。例如Class<String>表示String类的运行时信息。


    小写的class首先用于类定义;其次,当它位于类名之后时,如String.class,表示对String类所对应的Class类的实例(常量)的引用。例如

      Class<String> cls = String.class;
      System.out.println("".getClass() == cls); //返回true
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。