Java基础之引用(String,char[],Integer)总结
1、String的引用:
下列代码执行后的结果为:
- public class Test {
- public static void main(String[] args) {
- StringBuffer a = new StringBuffer("A");
- StringBuffer b = new StringBuffer("B");
- operator(a, b);
- System.out.println(a + "," + b);
- }
- public static void operator(StringBuffer x, StringBuffer y) {
- x.append(y); y = x;
- }
- }
正确答案是:AB,B
解析:
执行
- public class Example {
- String str = new String("good");
- char[] ch = { 'a', 'b', 'c' };
- public static void main(String args[]) {
- Example ex = new Example();
- ex.change(ex.str, ex.ch);
- System.out.print(ex.str + " and ");
- System.out.print(ex.ch);
- }
- public void change(String str, char ch[])
- {
- str = "test ok";
- ch[0] = 'g';
- }
- }
分析:change函数被调用时,第一个形参str接收了类的成员变量str的值(虽然名称都是str,但是却是两个独立的String类型的引用变量),注意这两个str自身都是变量且都指向了堆内存中的String对象"good",当我们在change函数内部将str指向了另一个String对象"test ok"后,类的成员变量str仍然保持指向"good",所以最终打印出来就是"good";对于第二个形参ch,它也是接收了类的成员变量ch的值拷贝,这一点和str没有差别,即两个ch都指向了字符数组{ 'a', 'b', 'c' }的首地址,但是ch[0]表示的是字符数组中'a'的地址,修改了它也就修改了字符数组的第一个元素,这个改变在change函数返回之后也会存在。所以本题中两个形参传参的本质区别在于,修改str只是将形参指向了新的对象,对外部的实参没有任何影响,而修改ch[0]是实实在在的修改了字符数组的首元素。
1.可以试验一下,在Example中再定义一个字符数组char[] ch2={'d'};然后在change函数中把ch[0] = 'g';这句改成ch=ch2;,那么就会和str传参一样的,change函数返回后不会对类的成员ch有任何影响。
2.本题和“String类是一个final类,不能被继承”以及“String底层的字符数组被声明为private final char value[];所以其值不能被修改”这些String的特性无关。
- public class Example {
- String str = new String("good");
- char[] ch = { 'a', 'b', 'c' };
- char[] ch2={'d'};
- public static void main(String args[]) {
- Example ex = new Example();
- ex.change(ex.str, ex.ch);
- System.out.print(ex.str + " and ");
- System.out.print(ex.ch);
- }
- public void change(String str, char ch[])
- {
- str = "test ok";
- ch=ch2;
- }
- }
输出为:good and abc
- public class Tester{
- public static void main(String[] args){
- Integer var1=new Integer(1);
- Integer var2=var1;
- doSomething(var2);
- System.out.print(var1.intValue());
- System.out.print(var1==var2);
- }
- public static void doSomething(Integer integer){
- integer=new Integer(2);
- }
- }
正确答案为:1true
Java基础之引用(String,char[],Integer)总结的更多相关文章
- Java基础-字符串(String)常用方法
Java基础-字符串(String)常用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java的API概念 Java的API(API:Application(应用) Pr ...
- Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...
- 【JAVA - 基础】之String存储机制浅析
本文主要解决以下几个问题 String源码解析? String和new String的区别? String通过"+"或concat累加时的对象创建机制? StringBuilder ...
- java基础学习日志--String、StringBuffer方法案例
package StringDemo; import java.util.Arrays; /* * 常用String.StringBufer类的方法 */ public class Demo1 { p ...
- Java基础笔记之String相关知识
(二)String Sring 被声明为 final ,因此不可被继承. String的不可变性: 看String的定义(java9版本): public final class String imp ...
- Java 基础 - 如何理解String不可变
ref: https://www.zhihu.com/question/20618891 第一个答案. 扩展“ Java 基础 - System.arraycopy() 浅拷贝 深拷贝
- Java基础拾遗(一) — 忽略的 Integer 类
学习前我们先看一个笔者之前项目踩过的坑 public static void main(String[] args) { Integer a = 127; Integer b = 127; Syste ...
随机推荐
- Loadrunner手动编写包含事务、检查点、关联等元素的脚本实例
一.前言: 本文适合初学者,包含很多细节,包括 二.准备: 1.以虚拟机中的Linux系统作为服务器,开启bugfree服务. 2.以fiddler作为抓包工具,辅助脚本开发. 3.脚本流程:bugf ...
- “玲珑杯”ACM比赛 Round #22 E 贪心,脑洞
1171 - 这个E大概是垃圾桶捡来的 Time Limit:2s Memory Limit:128MByte Submissions:138Solved:45 DESCRIPTION B君在做 CO ...
- 企业级LNMP架构搭建实例(基于Centos6.x)
1.1 部署LNMP架构说明 1.1.1 LNMP架构内容 01.部署linux系统 02.部署nginx网站服务 03.部署mysql数据库服务 04.部署php动态解析服务 1.1.2 配置LNM ...
- 前端chrome浏览器调试
引言 "工欲善其事,必先利其器" 恩,这句话我觉得说的特别有道理,举个例子来说吧,厉害的化妆师都有一套非常专业的刷子,散粉刷负责定妆,眼影刷负责打眼影,各司其职,有了专业的工具才能 ...
- 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)
引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...
- NGUI_PopupList
八.PopuList下拉菜单 1.使用Populist的规律: (1).有一系列选项需要玩家做出选择,这些选项是有限多个的. (2).这些选项玩家必须选择一个,也只能选择一个. (3).这些选项如果全 ...
- 从Windows迁移SQL Server到Linux
前一篇博客关于SQL Server on Linux的安装,地址:http://www.cnblogs.com/fishparadise/p/8057650.html,现在测试把Windows平台下的 ...
- jquery on的常用 用法
定义和用法 on()方法在被选元素及子元素上添加一个或多个方法. 提示:使用on方法添加的事件处理程序适用于当前及未来的元素(javascript创建的) 提示:移除事件处理程序使用off()方法,如 ...
- 一个简单的双向链表(C++实现)
直接上代码,亲测有用. #ifndef __DLINK_H__ #define __DLINK_H__ /* [phead] -> [index0] -> [index1] -> [ ...
- plsql本机不安装数据库连接远程数据库
用PL/SQL连接oracle数据库,不管是本地的还是远程的,一般都需要安装oracle客户端 如何达到不安装oracle客户端,又能使用PL/SQL工具? 1. oracle官网提供了i ...