String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?

String s = new String("xyz");

这个跟常量池没有关系,只要是new,都是重新分配堆空间,如果不区分栈和堆,这里创建了1个String Object。如果是从jvm角度来说的话,它是创建了两个对象,String s是在栈里创建了一个变量new String("xyz")是在堆里创建了一个对象并被s引用到

如果是String s = "xyz",那就要看常量池里有没有"xyz",如果有直接引用,如果没有则创建再引用

这里"xyz"本身就是pool中的一个对象,而在运行时执行new String()时,将pool中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给s持有。ok,这条语句就创建了2个String对象。

这时用==判断就可知,虽然两个对象的"内容"相同(equals()判断),但两个引用变量所持有的引用不同

补充一个面试题:String str = "aaa" + new String("bbb")创建了几个String对象?

 "aa"一个对象   new Sring()一个对象  "bbb"一个对象 "aa" + new String("bbb");一个对象

  

  1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其  
  操作方式类似于数据结构中的栈。  
  2、堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回  
  收   。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。  
  3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的  
  全局变量和静态变量在一块区域,   未初始化的全局变量和未初始化的静态变量在相邻的另  
  一块区域。   -   程序结束后由系统释放。  
  4、文字常量区   —常量字符串就是放在这里的。   程序结束后由系统释放  
  5、程序代码区—存放函数体的二进制代码。  


  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最有效率的方法算出2乘以8等於几? 10 9、请设计一个一百亿的计算器 10 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 12 12、静态变量和实例变量的区别? 13 13、是否可以从一个static方法内部发出对非static方法的调用? 13 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 14 16、下面的代码有什么不妥之处? 14 17、请说出作用域public,private,protected,以及不写时的区别 14 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 15 19、构造器Constructor是否可被override? 16 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 16 21、写clone()方法时,通常都有一行代码,是什么? 16 22、面向对象的特征有哪些方面 17 23、java中实现多态的机制是什么? 18 24、abstract class和interface有什么区别? 18 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 20 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 20 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 22 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 23 29、super.getClass()方法调用 23 30、String是最基本的数据类型吗? 24 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 24 32、是否可以继承String类? 25 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 25 34、StringStringBuffer的区别 25 35、如何把一段逗号分割的字符串转换成一个数组? 26 36、数组有没有length()这个方法? String有没有length()这个方法? 26 37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 26 38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 27 39、下面的程序代码输出的结果是多少? 28 40、final, finally, finalize的区别。 30 41、运行时异常与一般异常有何异同? 30 42、error和exception有什么区别? 30 43、Java中的异常处理机制的简单原理和应用。 30 44、请写出你最常见到的5个runtime exception。 31 45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 32 .... ....
一. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最有效率的方法算出2乘以8等於几? 9 9、请设计一个一百亿的计算器 9 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有什么不妥之处? 13 17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 23 34、StringStringBuffer的区别
可以使用Spring提供的自定义注解和拦截器来实现对请求参数的拦截和替换。 首先,定义一个自定义注解,用来标注需要被拦截和替换参数的方法: ```java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ReplaceParam { String value() default ""; } ``` 然后,定义一个拦截器,实现对请求参数的拦截和替换: ```java @Component public class ReplaceParamInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod method = (HandlerMethod) handler; ReplaceParam annotation = method.getMethodAnnotation(ReplaceParam.class); if (annotation != null) { String paramName = annotation.value(); String paramValue = request.getParameter(paramName); // 进行参数替换 String replacedParamValue = replaceParam(paramValue); // 将替换后的参数设置回请求中 request.setParameter(paramName, replacedParamValue); } } return true; } private String replaceParam(String paramValue) { // 进行参数替换的逻辑,例如将"abc"替换为"xyz" return paramValue.replace("abc", "xyz"); } } ``` 最后,在需要被拦截和替换参数的方法上添加@ReplaceParam注解即可: ```java @GetMapping("/user") @ReplaceParam("name") public String getUserByName(@RequestParam("name") String name) { // 这里的name参数已经被拦截器替换过了 ... } ``` 当请求路径为"/user?name=abc"时,拦截器会将请求中的"name"参数值"abc"替换为"xyz",最终方法中的name参数值为"xyz"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值