本题目不是很正确,但是我想说的是java的return 类引用是指针。下面一段代码
public class RetTest
{
private TestEntity tsEt;
private String tsStr;
private int tsI;
public RetTest()
{
tsI = 0;
tsStr = "A";
tsEt = new TestEntity();
}
public int GetI()
{
return tsI;
}
public int I1()
{
tsI = 1;
return tsI;
}
public int I2()
{
tsI = 2;
return tsI;
}
public String GetStr()
{
return tsStr;
}
public String Str1()
{
tsStr = "B";
return tsStr;
}
public String Str2()
{
tsStr = "C";
return tsStr;
}
public TestEntity GetEntity()
{
return tsEt;
}
public TestEntity Entity1()
{
//TestEntity tsEt1 = new TestEntity();
tsEt.SetI(1);
tsEt.SetIRef(new Integer(1));
return tsEt;
}
public TestEntity Entity2()
{
tsEt.SetI(2);
tsEt.SetIRef(new Integer(2));
return tsEt;
}
// public static void main(String[] args)
public static void main(String[] args)
{
RetTest retTest = new RetTest();
int Itest = retTest.GetI();
System.out.println("I: " + Itest);
int Itest1 = retTest.I1();
System.out.println("I: " + Itest);
System.out.println("I1: " + Itest1);
int Itest2 = retTest.I2();
System.out.println("I: " + Itest);
System.out.println("I1: " + Itest1);
System.out.println("I2: " + Itest2);
//-----------------------------------------------------
String str = retTest.GetStr();
System.out.println("Str: " + str);
String str1 = retTest.Str1();
System.out.println("Str: " + str);
System.out.println("Str1: " + str1);
String str2 = retTest.Str2();
System.out.println("Str: " + str);
System.out.println("Str1: " + str1);
System.out.println("Str2: " + str2);
//-----------------------------------------------------
TestEntity testEt = retTest.GetEntity();
System.out.println("testEt -> Integer: " + testEt.GetIRef() + ", i:" + testEt.GetI());
TestEntity testEt1 = retTest.Entity1();
System.out.println("testEt -> Integer: " + testEt.GetIRef() + ", i:" + testEt.GetI());
System.out.println("testEt1 -> Integer: " + testEt1.GetIRef() + ", i:" + testEt1.GetI());
TestEntity testEt2 = retTest.Entity2();
System.out.println("testEt -> Integer: " + testEt.GetIRef() + ", i:" + testEt.GetI());
System.out.println("testEt1 -> Integer: " + testEt1.GetIRef() + ", i:" + testEt1.GetI());
System.out.println("testEt2 -> Integer: " + testEt2.GetIRef() + ", i:" + testEt2.GetI());
System.out.println("testEt = testEt1: " + (testEt == testEt1));
System.out.println("testEt = testEt2: " + (testEt == testEt2));
System.out.println("testEt1 = testEt2: " + (testEt1 == testEt2));
}
}
class TestEntity
{
private Integer iRef;
private int i;
public void SetI(int i)
{
this.i = i;
}
public int GetI()
{
return i;
}
public void SetIRef(Integer iRef)
{
this.iRef = iRef;
}
public Integer GetIRef()
{
return iRef;
}
}
返回的结果为:
I: 0
I: 0
I1: 1
I: 0
I1: 1
I2: 2
Str: A
Str: A
Str1: B
Str: A
Str1: B
Str2: C
testEt -> Integer: null, i:0
testEt -> Integer: 1, i:1
testEt1 -> Integer: 1, i:1
testEt -> Integer: 2, i:2
testEt1 -> Integer: 2, i:2
testEt2 -> Integer: 2, i:2
testEt = testEt1: true
testEt = testEt2: true
testEt1 = testEt2: true
可以看出int 是值类型,返回的是值的copy
TestEntity 是一个类, 它返回的情况:
testEt -> Integer: null, i:0
testEt -> Integer: 1, i:1
testEt1 -> Integer: 1, i:1
testEt -> Integer: 2, i:2
testEt1 -> Integer: 2, i:2
testEt2 -> Integer: 2, i:2
testEt = testEt1: true
testEt = testEt2: true
testEt1 = testEt2: true
可以清楚的看出return的就是指针内容
而String类型的怎么看上去像是基本类型的一样呢?String也是类啊!
因为在String的对象池里,"A"、"B"、"C"三个字符串都是并没有存在的,这样每次String类型的对象每次=的时候相当于都要创建了一个String的对象。当然就如Str = new String("A); Str1 = new String("B"); Str2 = new String("C");这是三个不同的类当然在堆中的地址也是不同的。
由于String对象池的特性,有时候也会产生这样的情况。如果修改一些代码
...
public String Str1()
{
tsStr = "A"; //把“B”改成“A”
return tsStr;
}
...
添加
......
System.out.println("Str = Str1: " + (str == str1));
System.out.println("Str = Str2: " + (str == str2));
System.out.println("Str1 = Str2: " + (str1 == str2));
......
关于String测试的部分就会是:
Str: A
Str: A
Str1: A
Str: A
Str1: A
Str2: C
Str = Str1: true
Str = Str2: false
Str1 = Str2: false
这时候“Str = Str1: true”,要理解这个其实对java中的String很熟悉的话也是很好理解的。因为“A” 在对象池里已经存在了,这时候=的时候后面是“A”的话,对象的指针就会指向已经存在的“A”,而不在新建对象。
return 针对对象是指针,知道的这点编写函数的时候,尤其类中全局变量,在被返回的时候有可能多个函数都返回,这样就要注意了,return的只不过是指针!
分享到:
相关推荐
return this 马克-to-win Java视频this指针的详细介绍
return new String(chars); } } ``` 在这个解决方案中,`left`和`right`指针分别从头和尾开始,通过交换它们指向的字符,实现了字符串的反转。由于这个过程只需要遍历一次数组,所以时间复杂度是O(n),其中n是...
双指针是解决许多算法问题的一种高效策略,尤其在处理数组或字符串时。本资料包“java-leetcode面试题解双指针之第151题反转字符串中的单词.zip”主要探讨了LeetCode第151题,即如何使用双指针技巧来反转字符串中的...
本文将详细讲解如何用Java解决这个问题,以及双指针在解题中的应用。 首先,我们定义“回文数”为正向读和反向读都一样的数字,例如121、12321等。对于这个问题,我们的目标是检查一个整数是否为回文数。 传统的...
在Java编程领域,LeetCode是一个非常受欢迎的在线平台,它提供了大量的编程题目,帮助开发者提升算法和数据结构技能。...因此,对于Java开发者来说,深入理解和实践LeetCode上的双指针题目是提升自身技能的有效途径。
双指针是一种常见的算法思想,它在解决很多数组或字符串问题时能展现出高效性。 **问题描述:** 题目要求判断一个给定的字符串(可能包含字母、数字和空格)是否为回文串。回文串是指正读反读都能读通的字符串,...
### Java及C++中传值传递、引用传递和指针方式的理解 在程序设计语言中,函数调用时参数的传递方式对理解程序的行为至关重要。本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用...
return true; } } } ``` 在这个示例中,我们首先检查源文件是否存在且是一个普通文件。然后尝试使用`renameTo()`方法移动文件,这个方法在同一个文件系统内通常能直接完成移动操作。如果`renameTo()`失败,我们...
在C/C++编程中,指针函数和函数指针是两个看似相似但实质不同的概念,尤其是在Android NDK(Native Development Kit)开发中显得尤为重要。NDK允许开发者使用原生的C/C++代码来编写Android应用的一部分,从而提高...
JNIEnv是JNI环境的指针,提供了许多有用的函数,用于在native代码和Java代码之间交互。jclass是Java类的句柄,用于表示一个Java类。 下面是一个简单的例子,演示如何在C++中实例化一个Java类: ```c jobject ...
这里,`JNIEXPORT`和`JNIEXPORT`是JNI的宏,`JNIEnv *env`是与JVM交互的环境指针,`jobject obj`是Java对象的指针。 3. **Java调用DLL**:在Java端,首先需要声明native方法,使用`native`关键字。然后使用`javah`...
### Java中的赋值运算符、拷贝初始化及this指针详解 #### 一、赋值运算符与拷贝初始化 1. **赋值与初始化的区别**: - **初始化**通常发生在对象创建时,比如使用构造函数设定初始状态。 - **赋值**则是在对象...
在Java中,检查一个字符串是否为回文是一个常见的字符串处理问题,可以通过多种方法实现。下面我们将详细讨论如何在Java中检查字符串是否为回文。 首先,我们可以使用基本的字符串操作来实现。这种方法的思路是将原...
### 面向Java开发者的Go编程:详细解析 #### 一、引言 随着Go语言的日益流行,越来越多的Java开发者开始转向学习这门语言。Go语言以其简洁高效的特性吸引了大量的关注,尤其是在高并发场景下的表现更是令人瞩目。...
在Java编程中,`Optional` 类自 Java 8 引入,旨在解决长期以来困扰开发者们的空指针异常(`NullPointerException`)问题。`Optional` 是一个容器类,代表一个值存在或不存在。它提供了一种更安全的方式来处理可能为...
### 复制带随机指针的链表 #### 问题背景 在计算机科学中,链表是一种常见的数据结构,用于存储一系列元素。每个元素(通常称为节点)包含一个指向链表中下一个节点的指针。然而,在某些情况下,链表中的每个节点...
快慢指针法的基本思想是使用两个指针,一个快指针和一个慢指针,快指针每次移动两步,慢指针每次移动一步。从链表的头节点开始,快指针和慢指针同时出发,如果链表中存在环,快指针最终会追上慢指针。 快慢指针法的...
在编程领域,双指针是一种常见的算法技巧,用于解决各种问题。本文主要分析了三个使用双指针技术解决的题目,分别来自剑指Offer计划13的Java实现,包括调整数组顺序使奇数位于偶数前面、寻找和为s的两个数字以及翻转...
在C/C++编程语言中,数组和指针是两个核心概念,它们的结合以及与函数指针的交互能实现强大的功能。本主题将深入探讨数组指针和函数指针的应用,通过提供的源代码实例,我们可以更好地理解这两种概念的实用性和灵活...